[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [[\"env\", { \"modules\": false }], \"react\", \"stage-2\"]\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# editorconfig.org\n\nroot = true\n\n\n[*]\n\n# change these settings to your own preference\nindent_style = space\nindent_size = 2\n\n# we recommend you to keep these unchanged\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[{package,bower}.json]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".eslintignore",
    "content": "**/dist/*\n**/node_modules/*\n"
  },
  {
    "path": ".eslintrc",
    "content": "{\n  \"extends\": \"eslint-config-satya164\",\n\n  \"env\": {\n    \"browser\": true,\n    \"node\": true,\n    \"es6\": true,\n  }\n}\n"
  },
  {
    "path": ".flowconfig",
    "content": "[ignore]\n\n[include]\n\n[libs]\n\n[options]\nmunge_underscores=true\n\nesproposal.class_static_fields=enable\nesproposal.class_instance_fields=enable\n\nmodule.name_mapper='^monaco-editor$' -> 'monaco-editor/esm/vs/editor/editor.main.js'\nmodule.name_mapper='^[./a-zA-Z0-9$_-]+\\.\\(bmp\\|gif\\|jpg\\|jpeg\\|png\\|psd\\|svg\\|webp\\|m4v\\|mov\\|mp4\\|mpeg\\|mpg\\|webm\\|aac\\|aiff\\|caf\\|m4a\\|mp3\\|wav\\|html\\|pdf|ttf|otf\\)$' -> 'ImageStub'\n\nsuppress_type=$FlowIssue\nsuppress_type=$FlowFixMe\nsuppress_type=$FixMe\n\nsuppress_comment=\\\\(.\\\\|\\n\\\\)*\\\\$FlowIssue\nsuppress_comment=\\\\(.\\\\|\\n\\\\)*\\\\$FlowFixMe\n"
  },
  {
    "path": ".gitignore",
    "content": "*~\n.DS_Store\n.sass-cache\n\nnpm-debug.log\nnode_modules/\nbower_components/\ndist/\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Satyajit Sahoo\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"
  },
  {
    "path": "README.md",
    "content": "Monaco Editor boilerplate\n=========================\n\nA simple boilerplate for Monaco editor with React.\n"
  },
  {
    "path": "index.html",
    "content": "<!doctype html>\n<html lang='en'>\n\n<head>\n  <meta charset='utf-8' />\n  <title>Monaco Editor Sample</title>\n  <style type=\"text/css\">\n    html {\n      box-sizing: border-box;\n    }\n\n    *,\n    *:before,\n    *:after {\n      box-sizing: inherit;\n    }\n\n    body {\n      margin: 0;\n      padding: 0;\n      overflow: hidden;\n    }\n  </style>\n</head>\n\n<body>\n  <div id='root'></div>\n  <script src='/dist/app.bundle.js'></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"monaco-editor-boilerplate\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"description\": \"Boilerplate for projects using ES2015 and React\",\n  \"main\": \"index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/satya164/react-boilerplate.git\"\n  },\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=development webpack-serve\",\n    \"flow\": \"flow\",\n    \"lint\": \"eslint .\",\n    \"build\": \"cross-env NODE_ENV=production webpack -p\",\n    \"prebuild\": \"del dist\"\n  },\n  \"author\": \"Satyajit Sahoo <satyajit.happy@gmail.com> (https://github.com/satya164/)\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.26.3\",\n    \"babel-eslint\": \"^9.0.0\",\n    \"babel-loader\": \"^7.1.5\",\n    \"babel-preset-env\": \"^1.7.0\",\n    \"babel-preset-react\": \"^6.24.1\",\n    \"babel-preset-stage-2\": \"^6.24.1\",\n    \"cross-env\": \"^5.2.0\",\n    \"css-loader\": \"^1.0.0\",\n    \"del-cli\": \"^1.1.0\",\n    \"eslint\": \"^5.5.0\",\n    \"eslint-config-satya164\": \"^2.0.1\",\n    \"flow-bin\": \"^0.80.0\",\n    \"mini-css-extract-plugin\": \"^0.4.2\",\n    \"style-loader\": \"^0.23.0\",\n    \"webpack\": \"^4.17.2\",\n    \"webpack-command\": \"^0.4.1\",\n    \"webpack-serve\": \"^2.0.2\",\n    \"worker-loader\": \"^2.0.0\"\n  },\n  \"dependencies\": {\n    \"babel-polyfill\": \"^6.26.0\",\n    \"dedent\": \"^0.7.0\",\n    \"idb-keyval\": \"^3.1.0\",\n    \"lodash\": \"^4.17.10\",\n    \"monaco-editor\": \"^0.14.3\",\n    \"prettier\": \"^1.14.2\",\n    \"react\": \"^16.5.0\",\n    \"react-dom\": \"^16.5.0\"\n  }\n}\n"
  },
  {
    "path": "serve.config.js",
    "content": "/* eslint-disable import/no-commonjs */\n\nmodule.exports = {\n  port: 3000,\n  devMiddleware: { publicPath: '/dist/' },\n};\n"
  },
  {
    "path": "src/App.js",
    "content": "/* @flow */\n\nimport 'babel-polyfill';\nimport * as React from 'react';\nimport dedent from 'dedent';\nimport Editor from './Editor';\n\nconst files = {\n  'App.js': dedent`import React, { Component } from 'react';\n  import { Text, View, StyleSheet } from 'react-native';\n  import { Constants } from 'expo';\n  import AssetExample from './AssetExample';\n\n  export default class App extends Component {\n    render() {\n      return (\n        <View style={styles.container}>\n          <Text style={styles.paragraph}>\n            Change code in the editor and watch it change on your phone!\n            Save to get a shareable url.\n          </Text>\n          <AssetExample />\n        </View>\n      );\n    }\n  }\n\n  const styles = StyleSheet.create({\n    container: {\n      flex: 1,\n      alignItems: 'center',\n      justifyContent: 'center',\n      paddingTop: Constants.statusBarHeight,\n      backgroundColor: '#ecf0f1',\n    },\n    paragraph: {\n      margin: 24,\n      fontSize: 18,\n      fontWeight: 'bold',\n      textAlign: 'center',\n      color: '#34495e',\n    },\n  });`,\n  'AssetExample.js': dedent`import React, { Component } from 'react';\n  import { Text, View, StyleSheet, Image } from 'react-native';\n\n  export default class AssetExample extends Component {\n    render() {\n      return (\n        <View style={styles.container}>\n          <Text style={styles.paragraph}>\n            Local files and assets can be imported by dragging and dropping them into the editor\n          </Text>\n          <Image style={styles.logo} source={require(\"../assets/expo.symbol.white.png\")}/>\n        </View>\n      );\n    }\n  }\n\n  const styles = StyleSheet.create({\n    container: {\n      alignItems: 'center',\n      justifyContent: 'center',\n    },\n    paragraph: {\n      margin: 24,\n      marginTop: 0,\n      fontSize: 14,\n      fontWeight: 'bold',\n      textAlign: 'center',\n      color: '#34495e',\n    },\n    logo: {\n      backgroundColor: \"#056ecf\",\n      height: 128,\n      width: 128,\n    }\n  });`,\n};\n\ntype State = {\n  files: {\n    [name: string]: string,\n  },\n  current: string,\n};\n\nexport default class App extends React.Component<{}, State> {\n  state = {\n    files,\n    current: 'App.js',\n  };\n\n  _handleValueChange = code =>\n    this.setState(state => ({\n      files: {\n        ...state.files,\n        [state.current]: code,\n      },\n    }));\n\n  _handleOpenPath = path => this.setState({ current: path });\n\n  render() {\n    return (\n      <div\n        style={{\n          display: 'flex',\n          height: '100vh',\n          width: '100vw',\n          fontFamily: 'sans-serif',\n        }}\n      >\n        <div\n          style={{ width: 180, borderRight: '1px solid rgba(0, 0, 0, .08)' }}\n        >\n          {Object.keys(this.state.files).map(name => (\n            <div\n              key={name}\n              style={{\n                fontSize: 14,\n                padding: '8px 24px',\n                backgroundColor:\n                  this.state.current === name ? 'black' : 'transparent',\n                color: this.state.current === name ? 'white' : 'black',\n                cursor: 'pointer',\n              }}\n              onClick={() => this._handleOpenPath(name)}\n            >\n              {name}\n            </div>\n          ))}\n        </div>\n        <Editor\n          files={this.state.files}\n          path={this.state.current}\n          value={this.state.files[this.state.current]}\n          onOpenPath={this._handleOpenPath}\n          onValueChange={this._handleValueChange}\n        />\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/Editor.css",
    "content": "/* Common overrides */\n.monaco-editor .line-numbers {\n  color: currentColor;\n  opacity: .5;\n}\n\n/* Light theme overrides */\n.ayu-light .JsxText {\n  color: #5c6773;\n}\n\n.ayu-light .JsxSelfClosingElement,\n.ayu-light .JsxOpeningElement,\n.ayu-light .JsxClosingElement,\n.ayu-light .tagName-of-JsxOpeningElement,\n.ayu-light .tagName-of-JsxClosingElement,\n.ayu-light .tagName-of-JsxSelfClosingElement {\n  color: #41a6d9;\n}\n\n.ayu-light .name-of-JsxAttribute {\n  color: #f08c36;\n}\n\n.ayu-light .name-of-PropertyAssignment {\n  color: #86b300;\n}\n\n.ayu-light .name-of-PropertyAccessExpression {\n  color: #f08c36;\n}\n\n/* Dark theme overrides */\n.ayu-dark .JsxText {\n  color: #d9d7ce;\n}\n\n.ayu-dark .JsxSelfClosingElement,\n.ayu-dark .JsxOpeningElement,\n.ayu-dark .JsxClosingElement,\n.ayu-dark .tagName-of-JsxOpeningElement,\n.ayu-dark .tagName-of-JsxClosingElement,\n.ayu-dark .tagName-of-JsxSelfClosingElement {\n  color: #5ccfe6;\n}\n\n.ayu-dark .name-of-JsxAttribute {\n  color: #ffcf71;\n}\n\n.ayu-dark .name-of-PropertyAssignment {\n  color: #bae67e;\n}\n\n.ayu-dark .name-of-PropertyAccessExpression {\n  color: #ffcf71;\n}\n"
  },
  {
    "path": "src/Editor.js",
    "content": "/* @flow */\n\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.main';\nimport { SimpleEditorModelResolverService } from 'monaco-editor/esm/vs/editor/standalone/browser/simpleServices';\nimport { StaticServices } from 'monaco-editor/esm/vs/editor/standalone/browser/standaloneServices';\nimport * as React from 'react';\nimport debounce from 'lodash/debounce';\nimport TypingsWorker from './workers/typings.worker';\nimport ESLintWorker from './workers/eslint.worker';\nimport light from './themes/light';\nimport dark from './themes/dark';\nimport './Editor.css';\n\n/**\n * Monkeypatch to make 'Find All References' work across multiple files\n * https://github.com/Microsoft/monaco-editor/issues/779#issuecomment-374258435\n */\nSimpleEditorModelResolverService.prototype.findModel = function(\n  editor,\n  resource\n) {\n  return monaco.editor\n    .getModels()\n    .find(model => model.uri.toString() === resource.toString());\n};\n\nglobal.MonacoEnvironment = {\n  getWorker(moduleId, label) {\n    let MonacoWorker;\n\n    switch (label) {\n      case 'json':\n        /* $FlowFixMe */\n        MonacoWorker = require('worker-loader!monaco-editor/esm/vs/language/json/json.worker');\n        break;\n      case 'typescript':\n      case 'javascript':\n        /* $FlowFixMe */\n        MonacoWorker = require('worker-loader!monaco-editor/esm/vs/language/typescript/ts.worker');\n        break;\n      default:\n        /* $FlowFixMe */\n        MonacoWorker = require('worker-loader!monaco-editor/esm/vs/editor/editor.worker');\n    }\n\n    return new MonacoWorker();\n  },\n};\n\nmonaco.editor.defineTheme('ayu-light', light);\nmonaco.editor.defineTheme('ayu-dark', dark);\n\n/**\n * Disable typescript's diagnostics for JavaScript files.\n * This suppresses errors when using Flow syntax.\n * It's also unnecessary since we use ESLint for error checking.\n */\nmonaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n  noSemanticValidation: true,\n  noSyntaxValidation: true,\n});\n\n/**\n * Use prettier to format JavaScript code.\n * This will replace the default formatter.\n */\nmonaco.languages.registerDocumentFormattingEditProvider('javascript', {\n  async provideDocumentFormattingEdits(model) {\n    const prettier = await import('prettier/standalone');\n    const babylon = await import('prettier/parser-babylon');\n    const text = prettier.format(model.getValue(), {\n      parser: 'babylon',\n      plugins: [babylon],\n      singleQuote: true,\n    });\n\n    return [\n      {\n        range: model.getFullModelRange(),\n        text,\n      },\n    ];\n  },\n});\n\n/**\n * Sync all the models to the worker eagerly.\n * This enables intelliSense for all files without needing an `addExtraLib` call.\n */\nmonaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);\nmonaco.languages.typescript.javascriptDefaults.setEagerModelSync(true);\n\n/**\n * Configure the typescript compiler to detect JSX and load type definitions\n */\nconst compilerOptions = {\n  allowJs: true,\n  allowSyntheticDefaultImports: true,\n  alwaysStrict: true,\n  jsx: 'React',\n  jsxFactory: 'React.createElement',\n};\n\nmonaco.languages.typescript.typescriptDefaults.setCompilerOptions(\n  compilerOptions\n);\nmonaco.languages.typescript.javascriptDefaults.setCompilerOptions(\n  compilerOptions\n);\n\ntype Props = {\n  files: { [path: string]: string },\n  path: string,\n  value: string,\n  onOpenPath: (path: string) => mixed,\n  onValueChange: (value: string) => mixed,\n  lineNumbers?: 'on' | 'off',\n  wordWrap: 'off' | 'on' | 'wordWrapColumn' | 'bounded',\n  scrollBeyondLastLine?: boolean,\n  minimap?: {\n    enabled?: boolean,\n    maxColumn?: number,\n    renderCharacters?: boolean,\n    showSlider?: 'always' | 'mouseover',\n    side?: 'right' | 'left',\n  },\n  theme: 'ayu-light' | 'ayu-dark',\n};\n\n// Store editor states such as cursor position, selection and scroll position for each model\nconst editorStates = new Map();\n\n// Store details about typings we have loaded\nconst extraLibs = new Map();\n\nconst codeEditorService = StaticServices.codeEditorService.get();\n\nexport default class Editor extends React.Component<Props> {\n  static defaultProps = {\n    lineNumbers: 'on',\n    wordWrap: 'on',\n    scrollBeyondLastLine: false,\n    minimap: {\n      enabled: false,\n    },\n    theme: 'ayu-light',\n  };\n\n  static removePath(path: string) {\n    // Remove editor states\n    editorStates.delete(path);\n\n    // Remove associated models\n    const model = monaco.editor\n      .getModels()\n      .find(model => model.uri.path === path);\n\n    model && model.dispose();\n  }\n\n  static renamePath(oldPath: string, newPath: string) {\n    const selection = editorStates.get(oldPath);\n\n    editorStates.delete(oldPath);\n    editorStates.set(newPath, selection);\n\n    this.removePath(oldPath);\n  }\n\n  componentDidMount() {\n    // Intialize the linter\n    this._linterWorker = new ESLintWorker();\n    this._linterWorker.addEventListener('message', ({ data }: any) =>\n      this._updateMarkers(data)\n    );\n\n    // Intialize the type definitions worker\n    this._typingsWorker = new TypingsWorker();\n    this._typingsWorker.addEventListener('message', ({ data }: any) =>\n      this._addTypings(data)\n    );\n\n    // Fetch some definitions\n    const dependencies = {\n      expo: '29.0.0',\n      react: '16.3.1',\n      'react-native': '0.55.4',\n    };\n\n    Object.keys(dependencies).forEach(name =>\n      this._typingsWorker.postMessage({\n        name,\n        version: dependencies[name],\n      })\n    );\n\n    const { path, value, ...rest } = this.props;\n\n    this._editor = monaco.editor.create(this._node, rest, {\n      codeEditorService: Object.assign(Object.create(codeEditorService), {\n        openCodeEditor: async ({ resource, options }, editor) => {\n          // Open the file with this path\n          // This should set the model with the path and value\n          this.props.onOpenPath(resource.path);\n\n          // Move cursor to the desired position\n          editor.setSelection(options.selection);\n\n          // Scroll the editor to bring the desired line into focus\n          editor.revealLine(options.selection.startLineNumber);\n\n          return Promise.resolve({\n            getControl: () => editor,\n          });\n        }\n      }),\n    });\n\n    Object.keys(this.props.files).forEach(path =>\n      this._initializeFile(path, this.props.files[path])\n    );\n\n    this._openFile(path, value);\n    this._phantom.contentWindow.addEventListener('resize', this._handleResize);\n  }\n\n  componentDidUpdate(prevProps: Props) {\n    const { path, value, ...rest } = this.props;\n\n    this._editor.updateOptions(rest);\n\n    if (path !== prevProps.path) {\n      editorStates.set(prevProps.path, this._editor.saveViewState());\n\n      this._openFile(path, value);\n    } else if (value !== this._editor.getModel().getValue()) {\n      const model = this._editor.getModel();\n\n      if (value !== model.getValue()) {\n        model.pushEditOperations(\n          [],\n          [\n            {\n              range: model.getFullModelRange(),\n              text: value,\n            },\n          ]\n        );\n      }\n    }\n  }\n\n  componentWillUnmount() {\n    this._linterWorker && this._linterWorker.terminate();\n    this._typingsWorker && this._typingsWorker.termnate();\n    this._subscription && this._subscription.dispose();\n    this._editor && this._editor.dispose();\n    this._phantom &&\n      this._phantom.contentWindow.removeEventListener(\n        'resize',\n        this._handleResize\n      );\n  }\n\n  clearSelection() {\n    const selection = this._editor.getSelection();\n\n    this._editor.setSelection(\n      new monaco.Selection(\n        selection.startLineNumber,\n        selection.startColumn,\n        selection.startLineNumber,\n        selection.startColumn\n      )\n    );\n  }\n\n  _initializeFile = (path: string, value: string) => {\n    let model = monaco.editor\n      .getModels()\n      .find(model => model.uri.path === path);\n\n    if (model) {\n      // If a model exists, we need to update it's value\n      // This is needed because the content for the file might have been modified externally\n      // Use `pushEditOperations` instead of `setValue` or `applyEdits` to preserve undo stack\n      model.pushEditOperations(\n        [],\n        [\n          {\n            range: model.getFullModelRange(),\n            text: value,\n          },\n        ]\n      );\n    } else {\n      model = monaco.editor.createModel(\n        value,\n        'javascript',\n        new monaco.Uri().with({ path })\n      );\n      model.updateOptions({\n        tabSize: 2,\n        insertSpaces: true,\n      });\n    }\n  };\n\n  _openFile = (path: string, value: string) => {\n    this._initializeFile(path, value);\n\n    const model = monaco.editor\n      .getModels()\n      .find(model => model.uri.path === path);\n\n    this._editor.setModel(model);\n\n    // Restore the editor state for the file\n    const editorState = editorStates.get(path);\n\n    if (editorState) {\n      this._editor.restoreViewState(editorState);\n    }\n\n    this._editor.focus();\n\n    // Subscribe to change in value so we can notify the parent\n    this._subscription && this._subscription.dispose();\n    this._subscription = this._editor.getModel().onDidChangeContent(() => {\n      const value = this._editor.getModel().getValue();\n\n      this.props.onValueChange(value);\n      this._lintCode(value);\n    });\n  };\n\n  _lintCode = code => {\n    const model = this._editor.getModel();\n\n    monaco.editor.setModelMarkers(model, 'eslint', []);\n\n    this._linterWorker.postMessage({\n      code,\n      version: model.getVersionId(),\n    });\n  };\n\n  _addTypings = ({ typings }) => {\n    Object.keys(typings).forEach(path => {\n      let extraLib = extraLibs.get(path);\n\n      extraLib && extraLib.dispose();\n      extraLib = monaco.languages.typescript.javascriptDefaults.addExtraLib(\n        typings[path],\n        path\n      );\n\n      extraLibs.set(path, extraLib);\n    });\n  };\n\n  _updateMarkers = ({ markers, version }: any) => {\n    requestAnimationFrame(() => {\n      const model = this._editor.getModel();\n\n      if (model && model.getVersionId() === version) {\n        monaco.editor.setModelMarkers(model, 'eslint', markers);\n      }\n    });\n  };\n\n  _handleResize = debounce(() => this._editor.layout(), 100, {\n    leading: true,\n    trailing: true,\n  });\n\n  _linterWorker: Worker;\n  _typingsWorker: Worker;\n  _subscription: any;\n  _editor: any;\n  _phantom: any;\n  _node: any;\n\n  render() {\n    return (\n      <div\n        style={{\n          display: 'flex',\n          flex: 1,\n          position: 'relative',\n          overflow: 'hidden',\n        }}\n      >\n        <iframe\n          ref={c => (this._phantom = c)}\n          type=\"text/html\"\n          style={{\n            display: 'block',\n            position: 'absolute',\n            left: 0,\n            top: 0,\n            height: '100%',\n            width: '100%',\n            pointerEvents: 'none',\n            opacity: 0,\n          }}\n        />\n        <div\n          ref={c => (this._node = c)}\n          style={{ display: 'flex', flex: 1, overflow: 'hidden' }}\n          className={this.props.theme}\n        />\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/config/eslint.json",
    "content": "{\n  \"parser\": \"babel-eslint\",\n  \"parserOptions\": {\n    \"sourceType\": \"module\"\n  },\n  \"env\": {\n    \"es6\": true\n  },\n  \"plugins\": [\n    \"babel\",\n    \"react\",\n    \"react-native\"\n  ],\n  \"globals\": {\n    \"__DEV__\": false,\n    \"__dirname\": false,\n    \"alert\": false,\n    \"Blob\": false,\n    \"cancelAnimationFrame\": false,\n    \"cancelIdleCallback\": false,\n    \"clearImmediate\": true,\n    \"clearInterval\": false,\n    \"clearTimeout\": false,\n    \"console\": false,\n    \"escape\": false,\n    \"Event\": false,\n    \"EventTarget\": false,\n    \"exports\": false,\n    \"fetch\": false,\n    \"File\": false,\n    \"FileReader\": false,\n    \"FormData\": false,\n    \"global\": false,\n    \"Map\": true,\n    \"module\": false,\n    \"navigator\": false,\n    \"process\": false,\n    \"Promise\": true,\n    \"requestAnimationFrame\": true,\n    \"requestIdleCallback\": true,\n    \"require\": false,\n    \"Set\": true,\n    \"setImmediate\": true,\n    \"setInterval\": false,\n    \"setTimeout\": false,\n    \"WebSocket\": false,\n    \"window\": false,\n    \"XMLHttpRequest\": false\n  },\n  \"rules\": {\n    \"constructor-super\": \"error\",\n    \"no-case-declarations\": \"error\",\n    \"no-class-assign\": \"error\",\n    \"no-cond-assign\": \"error\",\n    \"no-const-assign\": \"error\",\n    \"no-constant-condition\": \"error\",\n    \"no-control-regex\": \"error\",\n    \"no-delete-var\": \"error\",\n    \"no-dupe-args\": \"error\",\n    \"no-dupe-class-members\": \"error\",\n    \"no-dupe-keys\": \"error\",\n    \"no-duplicate-case\": \"error\",\n    \"no-empty\": \"error\",\n    \"no-empty-character-class\": \"error\",\n    \"no-empty-pattern\": \"error\",\n    \"no-ex-assign\": \"error\",\n    \"no-extra-boolean-cast\": \"error\",\n    \"no-extra-semi\": \"error\",\n    \"no-fallthrough\": \"error\",\n    \"no-func-assign\": \"error\",\n    \"no-global-assign\": \"error\",\n    \"no-inner-declarations\": \"error\",\n    \"no-invalid-regexp\": \"error\",\n    \"no-new-symbol\": \"error\",\n    \"no-obj-calls\": \"error\",\n    \"no-octal\": \"error\",\n    \"no-redeclare\": \"error\",\n    \"no-regex-spaces\": \"error\",\n    \"no-self-assign\": \"error\",\n    \"no-sparse-arrays\": \"error\",\n    \"no-this-before-super\": \"error\",\n    \"no-undef\": \"error\",\n    \"no-unexpected-multiline\": \"error\",\n    \"no-unreachable\": \"error\",\n    \"no-unsafe-finally\": \"error\",\n    \"no-unsafe-negation\": \"error\",\n    \"no-unused-labels\": \"error\",\n    \"require-yield\": \"error\",\n    \"use-isnan\": \"error\",\n    \"valid-typeof\": \"error\",\n\n    \"react/jsx-no-duplicate-props\": \"error\",\n    \"react/jsx-no-undef\": \"error\",\n    \"react/jsx-pascal-case\": \"error\",\n    \"react/jsx-uses-react\": \"error\",\n    \"react/jsx-uses-vars\": \"error\",\n    \"react/no-deprecated\": \"error\",\n    \"react/no-did-mount-set-state\": \"error\",\n    \"react/no-did-update-set-state\": \"error\",\n    \"react/no-direct-mutation-state\": \"error\",\n    \"react/no-is-mounted\": \"error\",\n    \"react/no-string-refs\": \"error\",\n    \"react/react-in-jsx-scope\": \"error\",\n    \"react/require-render-return\": \"error\",\n\n    \"react-native/no-unused-styles\": \"error\"\n  }\n}\n"
  },
  {
    "path": "src/index.js",
    "content": "/* @flow */\n\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nconst render = Component => ReactDOM.render(<Component />, window.root);\n\nrender(App);\n\n/* $FlowFixMe */\nif (module.hot) {\n  /* $FlowFixMe */\n  module.hot.accept('./App', () => render(App));\n}\n"
  },
  {
    "path": "src/themes/dark.js",
    "content": "/* @flow */\n\nexport default {\n  base: 'vs-dark',\n  inherit: true,\n  rules: [\n    { token: '', foreground: 'd9d7ce' },\n    { token: 'invalid', foreground: 'ff3333' },\n    { token: 'emphasis', fontstyle: 'italic' },\n    { token: 'strong', fontstyle: 'bold' },\n\n    { token: 'variable', foreground: 'd9d7ce' },\n    { token: 'variable.predefined', foreground: 'd9d7ce' },\n    { token: 'constant', foreground: 'ff9d45' },\n    { token: 'comment', foreground: '5c6773', fontstyle: 'italic' },\n    { token: 'number', foreground: 'ff9d45' },\n    { token: 'number.hex', foreground: 'ff9d45' },\n    { token: 'regexp', foreground: '95e6cb' },\n    { token: 'annotation', foreground: '5ccfe6' },\n    { token: 'type', foreground: '5ccfe6' },\n\n    { token: 'delimiter', foreground: 'd9d7ce' },\n    { token: 'delimiter.html', foreground: 'd9d7ce' },\n    { token: 'delimiter.xml', foreground: 'd9d7ce' },\n\n    { token: 'tag', foreground: '80d4ff' },\n    { token: 'tag.id.jade', foreground: '80d4ff' },\n    { token: 'tag.class.jade', foreground: '80d4ff' },\n    { token: 'meta.scss', foreground: '80d4ff' },\n    { token: 'metatag', foreground: '80d4ff' },\n    { token: 'metatag.content.html', foreground: 'bae67e' },\n    { token: 'metatag.html', foreground: '80d4ff' },\n    { token: 'metatag.xml', foreground: '80d4ff' },\n    { token: 'metatag.php', fontstyle: 'bold' },\n\n    { token: 'key', foreground: '5ccfe6' },\n    { token: 'string.key.json', foreground: '5ccfe6' },\n    { token: 'string.value.json', foreground: 'bae67e' },\n\n    { token: 'attribute.name', foreground: '5ccfe6' },\n    { token: 'attribute.value', foreground: 'bae67e' },\n    { token: 'attribute.value.number', foreground: 'ff9d45' },\n    { token: 'attribute.value.unit', foreground: 'bae67e' },\n    { token: 'attribute.value.html', foreground: 'bae67e' },\n    { token: 'attribute.value.xml', foreground: 'bae67e' },\n\n    { token: 'string', foreground: 'bae67e' },\n    { token: 'string.html', foreground: 'bae67e' },\n    { token: 'string.sql', foreground: 'bae67e' },\n    { token: 'string.yaml', foreground: 'bae67e' },\n\n    { token: 'keyword', foreground: 'ffae57' },\n    { token: 'keyword.json', foreground: 'ffae57' },\n    { token: 'keyword.flow', foreground: 'ffae57' },\n    { token: 'keyword.flow.scss', foreground: 'ffae57' },\n\n    { token: 'operator.scss', foreground: '666666' }, //\n    { token: 'operator.sql', foreground: '778899' }, //\n    { token: 'operator.swift', foreground: '666666' }, //\n    { token: 'predefined.sql', foreground: 'ff00ff' }, //\n  ],\n  colors: {\n    'editor.background': '#212733',\n    'editor.foreground': '#d9d7ce',\n    'editorIndentGuide.background': '#393b41',\n    'editorIndentGuide.activeBackground': '#494b51',\n  },\n};\n"
  },
  {
    "path": "src/themes/light.js",
    "content": "/* @flow */\n\nexport default {\n  base: 'vs',\n  inherit: true,\n  rules: [\n    { token: '', foreground: '5c6773' },\n    { token: 'invalid', foreground: 'ff3333' },\n    { token: 'emphasis', fontStyle: 'italic' },\n    { token: 'strong', fontStyle: 'bold' },\n\n    { token: 'variable', foreground: '5c6773' },\n    { token: 'variable.predefined', foreground: '5c6773' },\n    { token: 'constant', foreground: 'f08c36' },\n    { token: 'comment', foreground: 'abb0b6', fontStyle: 'italic' },\n    { token: 'number', foreground: 'f08c36' },\n    { token: 'number.hex', foreground: 'f08c36' },\n    { token: 'regexp', foreground: '4dbf99' },\n    { token: 'annotation', foreground: '41a6d9' },\n    { token: 'type', foreground: '41a6d9' },\n\n    { token: 'delimiter', foreground: '5c6773' },\n    { token: 'delimiter.html', foreground: '5c6773' },\n    { token: 'delimiter.xml', foreground: '5c6773' },\n\n    { token: 'tag', foreground: 'e7c547' },\n    { token: 'tag.id.jade', foreground: 'e7c547' },\n    { token: 'tag.class.jade', foreground: 'e7c547' },\n    { token: 'meta.scss', foreground: 'e7c547' },\n    { token: 'metatag', foreground: 'e7c547' },\n    { token: 'metatag.content.html', foreground: '86b300' },\n    { token: 'metatag.html', foreground: 'e7c547' },\n    { token: 'metatag.xml', foreground: 'e7c547' },\n    { token: 'metatag.php', fontStyle: 'bold' },\n\n    { token: 'key', foreground: '41a6d9' },\n    { token: 'string.key.json', foreground: '41a6d9' },\n    { token: 'string.value.json', foreground: '86b300' },\n\n    { token: 'attribute.name', foreground: 'f08c36' },\n    { token: 'attribute.value', foreground: '0451A5' },\n    { token: 'attribute.value.number', foreground: 'abb0b6' },\n    { token: 'attribute.value.unit', foreground: '86b300' },\n    { token: 'attribute.value.html', foreground: '86b300' },\n    { token: 'attribute.value.xml', foreground: '86b300' },\n\n    { token: 'string', foreground: '86b300' },\n    { token: 'string.html', foreground: '86b300' },\n    { token: 'string.sql', foreground: '86b300' },\n    { token: 'string.yaml', foreground: '86b300' },\n\n    { token: 'keyword', foreground: 'f2590c' },\n    { token: 'keyword.json', foreground: 'f2590c' },\n    { token: 'keyword.flow', foreground: 'f2590c' },\n    { token: 'keyword.flow.scss', foreground: 'f2590c' },\n\n    { token: 'operator.scss', foreground: '666666' }, //\n    { token: 'operator.sql', foreground: '778899' }, //\n    { token: 'operator.swift', foreground: '666666' }, //\n    { token: 'predefined.sql', foreground: 'FF00FF' }, //\n  ],\n  colors: {\n    'editor.background': '#fafafa',\n    'editor.foreground': '#5c6773',\n    'editorIndentGuide.background': '#ecebec',\n    'editorIndentGuide.activeBackground': '#e0e0e0',\n  },\n};\n"
  },
  {
    "path": "src/vendor/eslint.bundle.js",
    "content": "\"use strict\";var _isInteger=require(\"babel-runtime/core-js/number/is-integer\");var _isInteger2=_interopRequireDefault2(_isInteger);var _regenerator=require(\"babel-runtime/regenerator\");var _regenerator2=_interopRequireDefault2(_regenerator);var _raw=require(\"babel-runtime/core-js/string/raw\");var _raw2=_interopRequireDefault2(_raw);var _weakSet=require(\"babel-runtime/core-js/weak-set\");var _weakSet2=_interopRequireDefault2(_weakSet);var _from=require(\"babel-runtime/core-js/array/from\");var _from2=_interopRequireDefault2(_from);var _set2=require(\"babel-runtime/core-js/set\");var _set3=_interopRequireDefault2(_set2);var _weakMap3=require(\"babel-runtime/core-js/weak-map\");var _weakMap4=_interopRequireDefault2(_weakMap3);var _toStringTag=require(\"babel-runtime/core-js/symbol/to-string-tag\");var _toStringTag2=_interopRequireDefault2(_toStringTag);var _map3=require(\"babel-runtime/core-js/map\");var _map4=_interopRequireDefault2(_map3);var _sign=require(\"babel-runtime/core-js/math/sign\");var _sign2=_interopRequireDefault2(_sign);var _toPrimitive=require(\"babel-runtime/core-js/symbol/to-primitive\");var _toPrimitive2=_interopRequireDefault2(_toPrimitive);var _isFinite=require(\"babel-runtime/core-js/number/is-finite\");var _isFinite2=_interopRequireDefault2(_isFinite);var _isNan=require(\"babel-runtime/core-js/number/is-nan\");var _isNan2=_interopRequireDefault2(_isNan);var _species=require(\"babel-runtime/core-js/symbol/species\");var _species2=_interopRequireDefault2(_species);var _match=require(\"babel-runtime/core-js/symbol/match\");var _match2=_interopRequireDefault2(_match);var _maxSafeInteger3=require(\"babel-runtime/core-js/number/max-safe-integer\");var _maxSafeInteger4=_interopRequireDefault2(_maxSafeInteger3);var _freeze=require(\"babel-runtime/core-js/object/freeze\");var _freeze2=_interopRequireDefault2(_freeze);var _getOwnPropertySymbols3=require(\"babel-runtime/core-js/object/get-own-property-symbols\");var _getOwnPropertySymbols4=_interopRequireDefault2(_getOwnPropertySymbols3);var _getOwnPropertyNames=require(\"babel-runtime/core-js/object/get-own-property-names\");var _getOwnPropertyNames2=_interopRequireDefault2(_getOwnPropertyNames);var _getOwnPropertyDescriptor=require(\"babel-runtime/core-js/object/get-own-property-descriptor\");var _getOwnPropertyDescriptor2=_interopRequireDefault2(_getOwnPropertyDescriptor);var _assign3=require(\"babel-runtime/core-js/object/assign\");var _assign4=_interopRequireDefault2(_assign3);var _preventExtensions=require(\"babel-runtime/core-js/object/prevent-extensions\");var _preventExtensions2=_interopRequireDefault2(_preventExtensions);var _isExtensible=require(\"babel-runtime/core-js/object/is-extensible\");var _isExtensible2=_interopRequireDefault2(_isExtensible);var _stringify3=require(\"babel-runtime/core-js/json/stringify\");var _stringify4=_interopRequireDefault2(_stringify3);var _defineProperties=require(\"babel-runtime/core-js/object/define-properties\");var _defineProperties2=_interopRequireDefault2(_defineProperties);var _fromCodePoint=require(\"babel-runtime/core-js/string/from-code-point\");var _fromCodePoint2=_interopRequireDefault2(_fromCodePoint);var _getIterator4=require(\"babel-runtime/core-js/get-iterator\");var _getIterator5=_interopRequireDefault2(_getIterator4);var _setPrototypeOf=require(\"babel-runtime/core-js/object/set-prototype-of\");var _setPrototypeOf2=_interopRequireDefault2(_setPrototypeOf);var _create3=require(\"babel-runtime/core-js/object/create\");var _create4=_interopRequireDefault2(_create3);var _iterator21=require(\"babel-runtime/core-js/symbol/iterator\");var _iterator22=_interopRequireDefault2(_iterator21);var _symbol3=require(\"babel-runtime/core-js/symbol\");var _symbol4=_interopRequireDefault2(_symbol3);var _getPrototypeOf=require(\"babel-runtime/core-js/object/get-prototype-of\");var _getPrototypeOf2=_interopRequireDefault2(_getPrototypeOf);var _defineProperty2=require(\"babel-runtime/core-js/object/define-property\");var _defineProperty3=_interopRequireDefault2(_defineProperty2);var _keys3=require(\"babel-runtime/core-js/object/keys\");var _keys4=_interopRequireDefault2(_keys3);var _typeof5=require(\"babel-runtime/helpers/typeof\");var _typeof6=_interopRequireDefault2(_typeof5);function _interopRequireDefault2(obj){return obj&&obj.__esModule?obj:{default:obj};}(function(f){if((typeof exports===\"undefined\"?\"undefined\":(0,_typeof6.default)(exports))===\"object\"&&typeof module!==\"undefined\"){module.exports=f();}else if(typeof define===\"function\"&&define.amd){define([],f);}else{var g;if(typeof window!==\"undefined\"){g=window;}else if(typeof global!==\"undefined\"){g=global;}else if(typeof self!==\"undefined\"){g=self;}else{g=this;}g.eslint=f();}})(function(){var define,module,exports;return 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){module.exports={\"type\":\"Program\",\"body\":[],\"sourceType\":\"script\",\"range\":[0,0],\"loc\":{\"start\":{\"line\":0,\"column\":0},\"end\":{\"line\":0,\"column\":0}},\"comments\":[],\"tokens\":[]};},{}],2:[function(require,module,exports){/**\n * @fileoverview Defines environment settings and globals.\n * @author Elan Shanker\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar globals=require(\"globals\");//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\nmodule.exports={builtin:globals.es5,browser:{globals:globals.browser},node:{globals:globals.node,parserOptions:{ecmaFeatures:{globalReturn:true}}},commonjs:{globals:globals.commonjs,parserOptions:{ecmaFeatures:{globalReturn:true}}},\"shared-node-browser\":{globals:globals[\"shared-node-browser\"]},worker:{globals:globals.worker},amd:{globals:globals.amd},mocha:{globals:globals.mocha},jasmine:{globals:globals.jasmine},jest:{globals:globals.jest},phantomjs:{globals:globals.phantomjs},jquery:{globals:globals.jquery},qunit:{globals:globals.qunit},prototypejs:{globals:globals.prototypejs},shelljs:{globals:globals.shelljs},meteor:{globals:globals.meteor},mongo:{globals:globals.mongo},protractor:{globals:globals.protractor},applescript:{globals:globals.applescript},nashorn:{globals:globals.nashorn},serviceworker:{globals:globals.serviceworker},atomtest:{globals:globals.atomtest},embertest:{globals:globals.embertest},webextensions:{globals:globals.webextensions},es6:{globals:globals.es6,parserOptions:{ecmaVersion:6}},greasemonkey:{globals:globals.greasemonkey}};},{\"globals\":374}],3:[function(require,module,exports){/**\n * @fileoverview Configuration applied when a user configuration extends from\n * eslint:recommended.\n * @author Nicholas C. Zakas\n */\"use strict\";/* eslint sort-keys: [\"error\", \"asc\"], quote-props: [\"error\", \"consistent\"] *//* eslint-disable sort-keys */module.exports={parser:\"espree\",ecmaFeatures:{},rules:{/* eslint-enable sort-keys */\"accessor-pairs\":\"off\",\"array-bracket-spacing\":\"off\",\"array-callback-return\":\"off\",\"arrow-body-style\":\"off\",\"arrow-parens\":\"off\",\"arrow-spacing\":\"off\",\"block-scoped-var\":\"off\",\"block-spacing\":\"off\",\"brace-style\":\"off\",\"callback-return\":\"off\",\"camelcase\":\"off\",\"capitalized-comments\":\"off\",\"class-methods-use-this\":\"off\",\"comma-dangle\":\"off\",\"comma-spacing\":\"off\",\"comma-style\":\"off\",\"complexity\":\"off\",\"computed-property-spacing\":\"off\",\"consistent-return\":\"off\",\"consistent-this\":\"off\",\"constructor-super\":\"error\",\"curly\":\"off\",\"default-case\":\"off\",\"dot-location\":\"off\",\"dot-notation\":\"off\",\"eol-last\":\"off\",\"eqeqeq\":\"off\",\"func-call-spacing\":\"off\",\"func-name-matching\":\"off\",\"func-names\":\"off\",\"func-style\":\"off\",\"generator-star-spacing\":\"off\",\"global-require\":\"off\",\"guard-for-in\":\"off\",\"handle-callback-err\":\"off\",\"id-blacklist\":\"off\",\"id-length\":\"off\",\"id-match\":\"off\",\"indent\":\"off\",\"init-declarations\":\"off\",\"jsx-quotes\":\"off\",\"key-spacing\":\"off\",\"keyword-spacing\":\"off\",\"line-comment-position\":\"off\",\"linebreak-style\":\"off\",\"lines-around-comment\":\"off\",\"lines-around-directive\":\"off\",\"max-depth\":\"off\",\"max-len\":\"off\",\"max-lines\":\"off\",\"max-nested-callbacks\":\"off\",\"max-params\":\"off\",\"max-statements\":\"off\",\"max-statements-per-line\":\"off\",\"multiline-ternary\":\"off\",\"new-cap\":\"off\",\"new-parens\":\"off\",\"newline-after-var\":\"off\",\"newline-before-return\":\"off\",\"newline-per-chained-call\":\"off\",\"no-alert\":\"off\",\"no-array-constructor\":\"off\",\"no-await-in-loop\":\"off\",\"no-bitwise\":\"off\",\"no-caller\":\"off\",\"no-case-declarations\":\"error\",\"no-catch-shadow\":\"off\",\"no-class-assign\":\"error\",\"no-compare-neg-zero\":\"off\",\"no-cond-assign\":\"error\",\"no-confusing-arrow\":\"off\",\"no-console\":\"error\",\"no-const-assign\":\"error\",\"no-constant-condition\":\"error\",\"no-continue\":\"off\",\"no-control-regex\":\"error\",\"no-debugger\":\"error\",\"no-delete-var\":\"error\",\"no-div-regex\":\"off\",\"no-dupe-args\":\"error\",\"no-dupe-class-members\":\"error\",\"no-dupe-keys\":\"error\",\"no-duplicate-case\":\"error\",\"no-duplicate-imports\":\"off\",\"no-else-return\":\"off\",\"no-empty\":\"error\",\"no-empty-character-class\":\"error\",\"no-empty-function\":\"off\",\"no-empty-pattern\":\"error\",\"no-eq-null\":\"off\",\"no-eval\":\"off\",\"no-ex-assign\":\"error\",\"no-extend-native\":\"off\",\"no-extra-bind\":\"off\",\"no-extra-boolean-cast\":\"error\",\"no-extra-label\":\"off\",\"no-extra-parens\":\"off\",\"no-extra-semi\":\"error\",\"no-fallthrough\":\"error\",\"no-floating-decimal\":\"off\",\"no-func-assign\":\"error\",\"no-global-assign\":\"error\",\"no-implicit-coercion\":\"off\",\"no-implicit-globals\":\"off\",\"no-implied-eval\":\"off\",\"no-inline-comments\":\"off\",\"no-inner-declarations\":\"error\",\"no-invalid-regexp\":\"error\",\"no-invalid-this\":\"off\",\"no-irregular-whitespace\":\"error\",\"no-iterator\":\"off\",\"no-label-var\":\"off\",\"no-labels\":\"off\",\"no-lone-blocks\":\"off\",\"no-lonely-if\":\"off\",\"no-loop-func\":\"off\",\"no-magic-numbers\":\"off\",\"no-mixed-operators\":\"off\",\"no-mixed-requires\":\"off\",\"no-mixed-spaces-and-tabs\":\"error\",\"no-multi-assign\":\"off\",\"no-multi-spaces\":\"off\",\"no-multi-str\":\"off\",\"no-multiple-empty-lines\":\"off\",\"no-native-reassign\":\"off\",\"no-negated-condition\":\"off\",\"no-negated-in-lhs\":\"off\",\"no-nested-ternary\":\"off\",\"no-new\":\"off\",\"no-new-func\":\"off\",\"no-new-object\":\"off\",\"no-new-require\":\"off\",\"no-new-symbol\":\"error\",\"no-new-wrappers\":\"off\",\"no-obj-calls\":\"error\",\"no-octal\":\"error\",\"no-octal-escape\":\"off\",\"no-param-reassign\":\"off\",\"no-path-concat\":\"off\",\"no-plusplus\":\"off\",\"no-process-env\":\"off\",\"no-process-exit\":\"off\",\"no-proto\":\"off\",\"no-prototype-builtins\":\"off\",\"no-redeclare\":\"error\",\"no-regex-spaces\":\"error\",\"no-restricted-globals\":\"off\",\"no-restricted-imports\":\"off\",\"no-restricted-modules\":\"off\",\"no-restricted-properties\":\"off\",\"no-restricted-syntax\":\"off\",\"no-return-assign\":\"off\",\"no-return-await\":\"off\",\"no-script-url\":\"off\",\"no-self-assign\":\"error\",\"no-self-compare\":\"off\",\"no-sequences\":\"off\",\"no-shadow\":\"off\",\"no-shadow-restricted-names\":\"off\",\"no-spaced-func\":\"off\",\"no-sparse-arrays\":\"error\",\"no-sync\":\"off\",\"no-tabs\":\"off\",\"no-template-curly-in-string\":\"off\",\"no-ternary\":\"off\",\"no-this-before-super\":\"error\",\"no-throw-literal\":\"off\",\"no-trailing-spaces\":\"off\",\"no-undef\":\"error\",\"no-undef-init\":\"off\",\"no-undefined\":\"off\",\"no-underscore-dangle\":\"off\",\"no-unexpected-multiline\":\"error\",\"no-unmodified-loop-condition\":\"off\",\"no-unneeded-ternary\":\"off\",\"no-unreachable\":\"error\",\"no-unsafe-finally\":\"error\",\"no-unsafe-negation\":\"error\",\"no-unused-expressions\":\"off\",\"no-unused-labels\":\"error\",\"no-unused-vars\":\"error\",\"no-use-before-define\":\"off\",\"no-useless-call\":\"off\",\"no-useless-computed-key\":\"off\",\"no-useless-concat\":\"off\",\"no-useless-constructor\":\"off\",\"no-useless-escape\":\"off\",\"no-useless-rename\":\"off\",\"no-useless-return\":\"off\",\"no-var\":\"off\",\"no-void\":\"off\",\"no-warning-comments\":\"off\",\"no-whitespace-before-property\":\"off\",\"no-with\":\"off\",\"nonblock-statement-body-position\":\"off\",\"object-curly-newline\":\"off\",\"object-curly-spacing\":[\"off\",\"never\"],\"object-property-newline\":\"off\",\"object-shorthand\":\"off\",\"one-var\":\"off\",\"one-var-declaration-per-line\":\"off\",\"operator-assignment\":\"off\",\"operator-linebreak\":\"off\",\"padded-blocks\":\"off\",\"prefer-arrow-callback\":\"off\",\"prefer-const\":\"off\",\"prefer-destructuring\":\"off\",\"prefer-numeric-literals\":\"off\",\"prefer-promise-reject-errors\":\"off\",\"prefer-reflect\":\"off\",\"prefer-rest-params\":\"off\",\"prefer-spread\":\"off\",\"prefer-template\":\"off\",\"quote-props\":\"off\",\"quotes\":\"off\",\"radix\":\"off\",\"require-await\":\"off\",\"require-jsdoc\":\"off\",\"require-yield\":\"error\",\"rest-spread-spacing\":\"off\",\"semi\":\"off\",\"semi-spacing\":\"off\",\"sort-imports\":\"off\",\"sort-keys\":\"off\",\"sort-vars\":\"off\",\"space-before-blocks\":\"off\",\"space-before-function-paren\":\"off\",\"space-in-parens\":\"off\",\"space-infix-ops\":\"off\",\"space-unary-ops\":\"off\",\"spaced-comment\":\"off\",\"strict\":\"off\",\"symbol-description\":\"off\",\"template-curly-spacing\":\"off\",\"template-tag-spacing\":\"off\",\"unicode-bom\":\"off\",\"use-isnan\":\"error\",\"valid-jsdoc\":\"off\",\"valid-typeof\":\"error\",\"vars-on-top\":\"off\",\"wrap-iife\":\"off\",\"wrap-regex\":\"off\",\"yield-star-spacing\":\"off\",\"yoda\":\"off\"}};},{}],4:[function(require,module,exports){module.exports={\"rules\":{\"generator-star\":[\"generator-star-spacing\"],\"global-strict\":[\"strict\"],\"no-arrow-condition\":[\"no-confusing-arrow\",\"no-constant-condition\"],\"no-comma-dangle\":[\"comma-dangle\"],\"no-empty-class\":[\"no-empty-character-class\"],\"no-empty-label\":[\"no-labels\"],\"no-extra-strict\":[\"strict\"],\"no-reserved-keys\":[\"quote-props\"],\"no-space-before-semi\":[\"semi-spacing\"],\"no-wrap-func\":[\"no-extra-parens\"],\"space-after-function-name\":[\"space-before-function-paren\"],\"space-after-keywords\":[\"keyword-spacing\"],\"space-before-function-parentheses\":[\"space-before-function-paren\"],\"space-before-keywords\":[\"keyword-spacing\"],\"space-in-brackets\":[\"object-curly-spacing\",\"array-bracket-spacing\",\"computed-property-spacing\"],\"space-return-throw-case\":[\"keyword-spacing\"],\"space-unary-word-ops\":[\"space-unary-ops\"],\"spaced-line-comment\":[\"spaced-comment\"]}};},{}],5:[function(require,module,exports){'use strict';module.exports=function(){return /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;};},{}],6:[function(require,module,exports){'use strict';function assembleStyles(){var styles={modifiers:{reset:[0,0],bold:[1,22],// 21 isn't widely supported and 22 does the same thing\ndim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},colors:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39]},bgColors:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49]}};// fix humans\nstyles.colors.grey=styles.colors.gray;(0,_keys4.default)(styles).forEach(function(groupName){var group=styles[groupName];(0,_keys4.default)(group).forEach(function(styleName){var style=group[styleName];styles[styleName]=group[styleName]={open:\"\\x1B[\"+style[0]+'m',close:\"\\x1B[\"+style[1]+'m'};});(0,_defineProperty3.default)(styles,groupName,{value:group,enumerable:false});});return styles;}Object.defineProperty(module,'exports',{enumerable:true,get:assembleStyles});},{}],7:[function(require,module,exports){'use strict';var ES=require(\"es-abstract/es6\");module.exports=function find(predicate){var list=ES.ToObject(this);var length=ES.ToInteger(ES.ToLength(list.length));if(!ES.IsCallable(predicate)){throw new TypeError('Array#find: predicate must be a function');}if(length===0){return undefined;}var thisArg=arguments[1];for(var i=0,value;i<length;i++){value=list[i];if(ES.Call(predicate,thisArg,[value,i,list])){return value;}}return undefined;};},{\"es-abstract/es6\":188}],8:[function(require,module,exports){'use strict';var define=require(\"define-properties\");var ES=require(\"es-abstract/es6\");var implementation=require(\"./implementation\");var getPolyfill=require(\"./polyfill\");var shim=require(\"./shim\");var slice=Array.prototype.slice;var boundFindShim=function find(array,predicate){// eslint-disable-line no-unused-vars\nES.RequireObjectCoercible(array);var args=slice.call(arguments,1);return implementation.apply(array,args);};define(boundFindShim,{getPolyfill:getPolyfill,implementation:implementation,shim:shim});module.exports=boundFindShim;},{\"./implementation\":7,\"./polyfill\":9,\"./shim\":10,\"define-properties\":181,\"es-abstract/es6\":188}],9:[function(require,module,exports){'use strict';module.exports=function getPolyfill(){// Detect if an implementation exists\n// Detect early implementations which skipped holes in sparse arrays\n// eslint-disable-next-line no-sparse-arrays\nvar implemented=Array.prototype.find&&[,1].find(function(){return true;})!==1;// eslint-disable-next-line global-require\nreturn implemented?Array.prototype.find:require(\"./implementation\");};},{\"./implementation\":7}],10:[function(require,module,exports){'use strict';var define=require(\"define-properties\");var getPolyfill=require(\"./polyfill\");module.exports=function shimArrayPrototypeFind(){var polyfill=getPolyfill();define(Array.prototype,{find:polyfill},{find:function find(){return Array.prototype.find!==polyfill;}});return polyfill;};},{\"./polyfill\":9,\"define-properties\":181}],11:[function(require,module,exports){(function(global){'use strict';// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\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 */function compare(a,b){if(a===b){return 0;}var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break;}}if(x<y){return-1;}if(y<x){return 1;}return 0;}function isBuffer(b){if(global.Buffer&&typeof global.Buffer.isBuffer==='function'){return global.Buffer.isBuffer(b);}return!!(b!=null&&b._isBuffer);}// based on node assert, original notice:\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.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\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell 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 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 CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nvar util=require(\"util/\");var hasOwn=Object.prototype.hasOwnProperty;var pSlice=Array.prototype.slice;var functionsHaveNames=function(){return function foo(){}.name==='foo';}();function pToString(obj){return Object.prototype.toString.call(obj);}function isView(arrbuf){if(isBuffer(arrbuf)){return false;}if(typeof global.ArrayBuffer!=='function'){return false;}if(typeof ArrayBuffer.isView==='function'){return ArrayBuffer.isView(arrbuf);}if(!arrbuf){return false;}if(arrbuf instanceof DataView){return true;}if(arrbuf.buffer&&arrbuf.buffer instanceof ArrayBuffer){return true;}return false;}// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\nvar assert=module.exports=ok;// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n//                             actual: actual,\n//                             expected: expected })\nvar regex=/\\s*function\\s+([^\\(\\s]*)\\s*/;// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func){if(!util.isFunction(func)){return;}if(functionsHaveNames){return func.name;}var str=func.toString();var match=str.match(regex);return match&&match[1];}assert.AssertionError=function AssertionError(options){this.name='AssertionError';this.actual=options.actual;this.expected=options.expected;this.operator=options.operator;if(options.message){this.message=options.message;this.generatedMessage=false;}else{this.message=getMessage(this);this.generatedMessage=true;}var stackStartFunction=options.stackStartFunction||fail;if(Error.captureStackTrace){Error.captureStackTrace(this,stackStartFunction);}else{// non v8 browsers so we can have a stacktrace\nvar err=new Error();if(err.stack){var out=err.stack;// try to strip useless frames\nvar fn_name=getName(stackStartFunction);var idx=out.indexOf('\\n'+fn_name);if(idx>=0){// once we have located the function frame\n// we need to strip out everything before it (and its line)\nvar next_line=out.indexOf('\\n',idx+1);out=out.substring(next_line+1);}this.stack=out;}}};// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError,Error);function truncate(s,n){if(typeof s==='string'){return s.length<n?s:s.slice(0,n);}else{return s;}}function inspect(something){if(functionsHaveNames||!util.isFunction(something)){return util.inspect(something);}var rawname=getName(something);var name=rawname?': '+rawname:'';return'[Function'+name+']';}function getMessage(self){return truncate(inspect(self.actual),128)+' '+self.operator+' '+truncate(inspect(self.expected),128);}// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided.  All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\nfunction fail(actual,expected,message,operator,stackStartFunction){throw new assert.AssertionError({message:message,actual:actual,expected:expected,operator:operator,stackStartFunction:stackStartFunction});}// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail=fail;// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\nfunction ok(value,message){if(!value)fail(value,true,message,'==',assert.ok);}assert.ok=ok;// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\nassert.equal=function equal(actual,expected,message){if(actual!=expected)fail(actual,expected,message,'==',assert.equal);};// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\nassert.notEqual=function notEqual(actual,expected,message){if(actual==expected){fail(actual,expected,message,'!=',assert.notEqual);}};// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\nassert.deepEqual=function deepEqual(actual,expected,message){if(!_deepEqual(actual,expected,false)){fail(actual,expected,message,'deepEqual',assert.deepEqual);}};assert.deepStrictEqual=function deepStrictEqual(actual,expected,message){if(!_deepEqual(actual,expected,true)){fail(actual,expected,message,'deepStrictEqual',assert.deepStrictEqual);}};function _deepEqual(actual,expected,strict,memos){// 7.1. All identical values are equivalent, as determined by ===.\nif(actual===expected){return true;}else if(isBuffer(actual)&&isBuffer(expected)){return compare(actual,expected)===0;// 7.2. If the expected value is a Date object, the actual value is\n// equivalent if it is also a Date object that refers to the same time.\n}else if(util.isDate(actual)&&util.isDate(expected)){return actual.getTime()===expected.getTime();// 7.3 If the expected value is a RegExp object, the actual value is\n// equivalent if it is also a RegExp object with the same source and\n// properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n}else if(util.isRegExp(actual)&&util.isRegExp(expected)){return actual.source===expected.source&&actual.global===expected.global&&actual.multiline===expected.multiline&&actual.lastIndex===expected.lastIndex&&actual.ignoreCase===expected.ignoreCase;// 7.4. Other pairs that do not both pass typeof value == 'object',\n// equivalence is determined by ==.\n}else if((actual===null||(typeof actual===\"undefined\"?\"undefined\":(0,_typeof6.default)(actual))!=='object')&&(expected===null||(typeof expected===\"undefined\"?\"undefined\":(0,_typeof6.default)(expected))!=='object')){return strict?actual===expected:actual==expected;// If both values are instances of typed arrays, wrap their underlying\n// ArrayBuffers in a Buffer each to increase performance\n// This optimization requires the arrays to have the same type as checked by\n// Object.prototype.toString (aka pToString). Never perform binary\n// comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n// bit patterns are not identical.\n}else if(isView(actual)&&isView(expected)&&pToString(actual)===pToString(expected)&&!(actual instanceof Float32Array||actual instanceof Float64Array)){return compare(new Uint8Array(actual.buffer),new Uint8Array(expected.buffer))===0;// 7.5 For all other Object pairs, including Array objects, equivalence is\n// determined by having the same number of owned properties (as verified\n// with Object.prototype.hasOwnProperty.call), the same set of keys\n// (although not necessarily the same order), equivalent values for every\n// corresponding key, and an identical 'prototype' property. Note: this\n// accounts for both named and indexed properties on Arrays.\n}else if(isBuffer(actual)!==isBuffer(expected)){return false;}else{memos=memos||{actual:[],expected:[]};var actualIndex=memos.actual.indexOf(actual);if(actualIndex!==-1){if(actualIndex===memos.expected.indexOf(expected)){return true;}}memos.actual.push(actual);memos.expected.push(expected);return objEquiv(actual,expected,strict,memos);}}function isArguments(object){return Object.prototype.toString.call(object)=='[object Arguments]';}function objEquiv(a,b,strict,actualVisitedObjects){if(a===null||a===undefined||b===null||b===undefined)return false;// if one is a primitive, the other must be same\nif(util.isPrimitive(a)||util.isPrimitive(b))return a===b;if(strict&&(0,_getPrototypeOf2.default)(a)!==(0,_getPrototypeOf2.default)(b))return false;var aIsArgs=isArguments(a);var bIsArgs=isArguments(b);if(aIsArgs&&!bIsArgs||!aIsArgs&&bIsArgs)return false;if(aIsArgs){a=pSlice.call(a);b=pSlice.call(b);return _deepEqual(a,b,strict);}var ka=objectKeys(a);var kb=objectKeys(b);var key,i;// having the same number of owned properties (keys incorporates\n// hasOwnProperty)\nif(ka.length!==kb.length)return false;//the same set of keys (although not necessarily the same order),\nka.sort();kb.sort();//~~~cheap key test\nfor(i=ka.length-1;i>=0;i--){if(ka[i]!==kb[i])return false;}//equivalent values for every corresponding key, and\n//~~~possibly expensive deep test\nfor(i=ka.length-1;i>=0;i--){key=ka[i];if(!_deepEqual(a[key],b[key],strict,actualVisitedObjects))return false;}return true;}// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\nassert.notDeepEqual=function notDeepEqual(actual,expected,message){if(_deepEqual(actual,expected,false)){fail(actual,expected,message,'notDeepEqual',assert.notDeepEqual);}};assert.notDeepStrictEqual=notDeepStrictEqual;function notDeepStrictEqual(actual,expected,message){if(_deepEqual(actual,expected,true)){fail(actual,expected,message,'notDeepStrictEqual',notDeepStrictEqual);}}// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\nassert.strictEqual=function strictEqual(actual,expected,message){if(actual!==expected){fail(actual,expected,message,'===',assert.strictEqual);}};// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==.  assert.notStrictEqual(actual, expected, message_opt);\nassert.notStrictEqual=function notStrictEqual(actual,expected,message){if(actual===expected){fail(actual,expected,message,'!==',assert.notStrictEqual);}};function expectedException(actual,expected){if(!actual||!expected){return false;}if(Object.prototype.toString.call(expected)=='[object RegExp]'){return expected.test(actual);}try{if(actual instanceof expected){return true;}}catch(e){// Ignore.  The instanceof check doesn't work for arrow functions.\n}if(Error.isPrototypeOf(expected)){return false;}return expected.call({},actual)===true;}function _tryBlock(block){var error;try{block();}catch(e){error=e;}return error;}function _throws(shouldThrow,block,expected,message){var actual;if(typeof block!=='function'){throw new TypeError('\"block\" argument must be a function');}if(typeof expected==='string'){message=expected;expected=null;}actual=_tryBlock(block);message=(expected&&expected.name?' ('+expected.name+').':'.')+(message?' '+message:'.');if(shouldThrow&&!actual){fail(actual,expected,'Missing expected exception'+message);}var userProvidedMessage=typeof message==='string';var isUnwantedException=!shouldThrow&&util.isError(actual);var isUnexpectedException=!shouldThrow&&actual&&!expected;if(isUnwantedException&&userProvidedMessage&&expectedException(actual,expected)||isUnexpectedException){fail(actual,expected,'Got unwanted exception'+message);}if(shouldThrow&&actual&&expected&&!expectedException(actual,expected)||!shouldThrow&&actual){throw actual;}}// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\nassert.throws=function(block,/*optional*/error,/*optional*/message){_throws(true,block,error,message);};// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow=function(block,/*optional*/error,/*optional*/message){_throws(false,block,error,message);};assert.ifError=function(err){if(err)throw err;};var objectKeys=_keys4.default||function(obj){var keys=[];for(var key in obj){if(hasOwn.call(obj,key))keys.push(key);}return keys;};}).call(this,typeof global!==\"undefined\"?global:typeof self!==\"undefined\"?self:typeof window!==\"undefined\"?window:{});},{\"util/\":602}],12:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.default=function(rawLines,lineNumber,colNumber){var opts=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};colNumber=Math.max(colNumber,0);var highlighted=opts.highlightCode&&_chalk2.default.supportsColor||opts.forceColor;var chalk=_chalk2.default;if(opts.forceColor){chalk=new _chalk2.default.constructor({enabled:true});}var maybeHighlight=function maybeHighlight(chalkFn,string){return highlighted?chalkFn(string):string;};var defs=getDefs(chalk);if(highlighted)rawLines=highlight(defs,rawLines);var linesAbove=opts.linesAbove||2;var linesBelow=opts.linesBelow||3;var lines=rawLines.split(NEWLINE);var start=Math.max(lineNumber-(linesAbove+1),0);var end=Math.min(lines.length,lineNumber+linesBelow);if(!lineNumber&&!colNumber){start=0;end=lines.length;}var numberMaxWidth=String(end).length;var frame=lines.slice(start,end).map(function(line,index){var number=start+1+index;var paddedNumber=(\" \"+number).slice(-numberMaxWidth);var gutter=\" \"+paddedNumber+\" | \";if(number===lineNumber){var markerLine=\"\";if(colNumber){var markerSpacing=line.slice(0,colNumber-1).replace(/[^\\t]/g,\" \");markerLine=[\"\\n \",maybeHighlight(defs.gutter,gutter.replace(/\\d/g,\" \")),markerSpacing,maybeHighlight(defs.marker,\"^\")].join(\"\");}return[maybeHighlight(defs.marker,\">\"),maybeHighlight(defs.gutter,gutter),line,markerLine].join(\"\");}else{return\" \"+maybeHighlight(defs.gutter,gutter)+line;}}).join(\"\\n\");if(highlighted){return chalk.reset(frame);}else{return frame;}};var _jsTokens=require(\"js-tokens\");var _jsTokens2=_interopRequireDefault(_jsTokens);var _esutils=require(\"esutils\");var _esutils2=_interopRequireDefault(_esutils);var _chalk=require(\"chalk\");var _chalk2=_interopRequireDefault(_chalk);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function getDefs(chalk){return{keyword:chalk.cyan,capitalized:chalk.yellow,jsx_tag:chalk.yellow,punctuator:chalk.yellow,number:chalk.magenta,string:chalk.green,regex:chalk.magenta,comment:chalk.grey,invalid:chalk.white.bgRed.bold,gutter:chalk.grey,marker:chalk.red.bold};}var NEWLINE=/\\r\\n|[\\n\\r\\u2028\\u2029]/;var JSX_TAG=/^[a-z][\\w-]*$/i;var BRACKET=/^[()\\[\\]{}]$/;function getTokenType(match){var _match$slice=match.slice(-2),offset=_match$slice[0],text=_match$slice[1];var token=(0,_jsTokens.matchToToken)(match);if(token.type===\"name\"){if(_esutils2.default.keyword.isReservedWordES6(token.value)){return\"keyword\";}if(JSX_TAG.test(token.value)&&(text[offset-1]===\"<\"||text.substr(offset-2,2)==\"</\")){return\"jsx_tag\";}if(token.value[0]!==token.value[0].toLowerCase()){return\"capitalized\";}}if(token.type===\"punctuator\"&&BRACKET.test(token.value)){return\"bracket\";}return token.type;}function highlight(defs,text){return text.replace(_jsTokens2.default,function(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}var type=getTokenType(args);var colorize=defs[type];if(colorize){return args[0].split(NEWLINE).map(function(str){return colorize(str);}).join(\"\\n\");}else{return args[0];}});}module.exports=exports[\"default\"];},{\"chalk\":76,\"esutils\":365,\"js-tokens\":386}],13:[function(require,module,exports){// comment fixes\nmodule.exports=function(ast,comments,tokens){if(comments.length){var firstComment=comments[0];var lastComment=comments[comments.length-1];// fixup program start\nif(!tokens.length){// if no tokens, the program starts at the end of the last comment\nast.start=lastComment.end;ast.loc.start.line=lastComment.loc.end.line;ast.loc.start.column=lastComment.loc.end.column;if(ast.leadingComments===null&&ast.innerComments.length){ast.leadingComments=ast.innerComments;}}else if(firstComment.start<tokens[0].start){// if there are comments before the first token, the program starts at the first token\nvar token=tokens[0];// ast.start = token.start;\n// ast.loc.start.line = token.loc.start.line;\n// ast.loc.start.column = token.loc.start.column;\n// estraverse do not put leading comments on first node when the comment\n// appear before the first token\nif(ast.body.length){var node=ast.body[0];node.leadingComments=[];var firstTokenStart=token.start;var len=comments.length;for(var i=0;i<len&&comments[i].start<firstTokenStart;i++){node.leadingComments.push(comments[i]);}}}// fixup program end\nif(tokens.length){var lastToken=tokens[tokens.length-1];if(lastComment.end>lastToken.end){// If there is a comment after the last token, the program ends at the\n// last token and not the comment\n// ast.end = lastToken.end;\nast.range[1]=lastToken.end;ast.loc.end.line=lastToken.loc.end.line;ast.loc.end.column=lastToken.loc.end.column;}}}else{if(!tokens.length){ast.loc.start.line=1;ast.loc.end.line=1;}}if(ast.body&&ast.body.length>0){ast.loc.start.line=ast.body[0].loc.start.line;ast.range[0]=ast.body[0].start;}};},{}],14:[function(require,module,exports){module.exports=function(tokens,tt){var startingToken=0;var currentToken=0;var numBraces=0;// track use of {}\nvar numBackQuotes=0;// track number of nested templates\nfunction isBackQuote(token){return tokens[token].type===tt.backQuote;}function isTemplateStarter(token){return isBackQuote(token)||// only can be a template starter when in a template already\ntokens[token].type===tt.braceR&&numBackQuotes>0;}function isTemplateEnder(token){return isBackQuote(token)||tokens[token].type===tt.dollarBraceL;}// append the values between start and end\nfunction createTemplateValue(start,end){var value=\"\";while(start<=end){if(tokens[start].value){value+=tokens[start].value;}else if(tokens[start].type!==tt.template){value+=tokens[start].type.label;}start++;}return value;}// create Template token\nfunction replaceWithTemplateType(start,end){var templateToken={type:\"Template\",value:createTemplateValue(start,end),start:tokens[start].start,end:tokens[end].end,loc:{start:tokens[start].loc.start,end:tokens[end].loc.end}};// put new token in place of old tokens\ntokens.splice(start,end-start+1,templateToken);}function trackNumBraces(token){if(tokens[token].type===tt.braceL){numBraces++;}else if(tokens[token].type===tt.braceR){numBraces--;}}while(startingToken<tokens.length){// template start: check if ` or }\nif(isTemplateStarter(startingToken)&&numBraces===0){if(isBackQuote(startingToken)){numBackQuotes++;}currentToken=startingToken+1;// check if token after template start is \"template\"\nif(currentToken>=tokens.length-1||tokens[currentToken].type!==tt.template){break;}// template end: find ` or ${\nwhile(!isTemplateEnder(currentToken)){if(currentToken>=tokens.length-1){break;}currentToken++;}if(isBackQuote(currentToken)){numBackQuotes--;}// template start and end found: create new token\nreplaceWithTemplateType(startingToken,currentToken);}else if(numBackQuotes>0){trackNumBraces(startingToken);}startingToken++;}};},{}],15:[function(require,module,exports){exports.attachComments=require(\"./attachComments\");exports.toTokens=require(\"./toTokens\");exports.toAST=require(\"./toAST\");exports.convertComments=function(comments){for(var i=0;i<comments.length;i++){var comment=comments[i];if(comment.type===\"CommentBlock\"){comment.type=\"Block\";}else if(comment.type===\"CommentLine\"){comment.type=\"Line\";}// sometimes comments don't get ranges computed,\n// even with options.ranges === true\nif(!comment.range){comment.range=[comment.start,comment.end];}}};},{\"./attachComments\":13,\"./toAST\":16,\"./toTokens\":18}],16:[function(require,module,exports){var source;module.exports=function(ast,traverse,code){source=code;ast.range=[ast.start,ast.end];traverse(ast,astTransformVisitor);};function changeToLiteral(node){node.type=\"Literal\";if(!node.raw){if(node.extra&&node.extra.raw){node.raw=node.extra.raw;}else{node.raw=source.slice(node.start,node.end);}}}function changeComments(nodeComments){for(var i=0;i<nodeComments.length;i++){var comment=nodeComments[i];if(comment.type===\"CommentLine\"){comment.type=\"Line\";}else if(comment.type===\"CommentBlock\"){comment.type=\"Block\";}comment.range=[comment.start,comment.end];}}var astTransformVisitor={noScope:true,enter:function enter(path){var node=path.node;node.range=[node.start,node.end];// private var to track original node type\nnode._babelType=node.type;if(node.innerComments){node.trailingComments=node.innerComments;delete node.innerComments;}if(node.trailingComments){changeComments(node.trailingComments);}if(node.leadingComments){changeComments(node.leadingComments);}// make '_paths' non-enumerable (babel-eslint #200)\nObject.defineProperty(node,\"_paths\",{value:node._paths,writable:true});},exit:function exit(path){var node=path.node;[fixDirectives].forEach(function(fixer){fixer(path);});if(path.isJSXText()){node.type=\"Literal\";node.raw=node.value;}if(path.isNumericLiteral()||path.isStringLiteral()){changeToLiteral(node);}if(path.isBooleanLiteral()){node.type=\"Literal\";node.raw=String(node.value);}if(path.isNullLiteral()){node.type=\"Literal\";node.raw=\"null\";node.value=null;}if(path.isRegExpLiteral()){node.type=\"Literal\";node.raw=node.extra.raw;node.value={};node.regex={pattern:node.pattern,flags:node.flags};delete node.extra;delete node.pattern;delete node.flags;}if(path.isObjectProperty()){node.type=\"Property\";node.kind=\"init\";}if(path.isClassMethod()||path.isObjectMethod()){var code=source.slice(node.key.end,node.body.start);var offset=code.indexOf(\"(\");node.value={type:\"FunctionExpression\",id:node.id,params:node.params,body:node.body,async:node.async,generator:node.generator,expression:node.expression,defaults:[],// basic support - TODO: remove (old esprima)\nloc:{start:{line:node.key.loc.start.line,column:node.key.loc.end.column+offset// a[() {]\n},end:node.body.loc.end}};// [asdf]() {\nnode.value.range=[node.key.end+offset,node.body.end];node.value.start=node.value.range&&node.value.range[0]||node.value.loc.start.column;node.value.end=node.value.range&&node.value.range[1]||node.value.loc.end.column;if(node.returnType){node.value.returnType=node.returnType;}if(node.typeParameters){node.value.typeParameters=node.typeParameters;}if(path.isClassMethod()){node.type=\"MethodDefinition\";}if(path.isObjectMethod()){node.type=\"Property\";if(node.kind===\"method\"){node.kind=\"init\";}}delete node.body;delete node.id;delete node.async;delete node.generator;delete node.expression;delete node.params;delete node.returnType;delete node.typeParameters;}if(path.isRestProperty()||path.isSpreadProperty()){node.type=\"Experimental\"+node.type;}if(path.isTypeParameter&&path.isTypeParameter()){node.type=\"Identifier\";node.typeAnnotation=node.bound;delete node.bound;}// flow: prevent \"no-undef\"\n// for \"Component\" in: \"let x: React.Component\"\nif(path.isQualifiedTypeIdentifier()){delete node.id;}// for \"b\" in: \"var a: { b: Foo }\"\nif(path.isObjectTypeProperty()){delete node.key;}// for \"indexer\" in: \"var a: {[indexer: string]: number}\"\nif(path.isObjectTypeIndexer()){delete node.id;}// for \"param\" in: \"var a: { func(param: Foo): Bar };\"\nif(path.isFunctionTypeParam()){delete node.name;}// modules\nif(path.isImportDeclaration()){delete node.isType;}if(path.isExportDeclaration()){var declar=path.get(\"declaration\");if(declar.isClassExpression()){node.declaration.type=\"ClassDeclaration\";}else if(declar.isFunctionExpression()){node.declaration.type=\"FunctionDeclaration\";}}// TODO: remove (old esprima)\nif(path.isFunction()){if(!node.defaults){node.defaults=[];}}// template string range fixes\nif(path.isTemplateLiteral()){node.quasis.forEach(function(q){q.range[0]-=1;if(q.tail){q.range[1]+=1;}else{q.range[1]+=2;}q.loc.start.column-=1;if(q.tail){q.loc.end.column+=1;}else{q.loc.end.column+=2;}});}}};function fixDirectives(path){if(!(path.isProgram()||path.isFunction()))return;var node=path.node;var directivesContainer=node;var body=node.body;if(node.type!==\"Program\"){directivesContainer=body;body=body.body;}if(!directivesContainer.directives)return;directivesContainer.directives.reverse().forEach(function(directive){directive.type=\"ExpressionStatement\";directive.expression=directive.value;delete directive.value;directive.expression.type=\"Literal\";changeToLiteral(directive.expression);body.unshift(directive);});delete directivesContainer.directives;}// fixDirectives\n},{}],17:[function(require,module,exports){module.exports=function(token,tt,source){var type=token.type;token.range=[token.start,token.end];if(type===tt.name){token.type=\"Identifier\";}else if(type===tt.semi||type===tt.comma||type===tt.parenL||type===tt.parenR||type===tt.braceL||type===tt.braceR||type===tt.slash||type===tt.dot||type===tt.bracketL||type===tt.bracketR||type===tt.ellipsis||type===tt.arrow||type===tt.star||type===tt.incDec||type===tt.colon||type===tt.question||type===tt.template||type===tt.backQuote||type===tt.dollarBraceL||type===tt.at||type===tt.logicalOR||type===tt.logicalAND||type===tt.bitwiseOR||type===tt.bitwiseXOR||type===tt.bitwiseAND||type===tt.equality||type===tt.relational||type===tt.bitShift||type===tt.plusMin||type===tt.modulo||type===tt.exponent||type===tt.prefix||type===tt.doubleColon||type.isAssign){token.type=\"Punctuator\";if(!token.value)token.value=type.label;}else if(type===tt.jsxTagStart){token.type=\"Punctuator\";token.value=\"<\";}else if(type===tt.jsxTagEnd){token.type=\"Punctuator\";token.value=\">\";}else if(type===tt.jsxName){token.type=\"JSXIdentifier\";}else if(type===tt.jsxText){token.type=\"JSXText\";}else if(type.keyword===\"null\"){token.type=\"Null\";}else if(type.keyword===\"false\"||type.keyword===\"true\"){token.type=\"Boolean\";}else if(type.keyword){token.type=\"Keyword\";}else if(type===tt.num){token.type=\"Numeric\";token.value=source.slice(token.start,token.end);}else if(type===tt.string){token.type=\"String\";token.value=source.slice(token.start,token.end);}else if(type===tt.regexp){token.type=\"RegularExpression\";var value=token.value;token.regex={pattern:value.pattern,flags:value.flags};token.value=\"/\"+value.pattern+\"/\"+value.flags;}return token;};},{}],18:[function(require,module,exports){var convertTemplateType=require(\"./convertTemplateType\");var toToken=require(\"./toToken\");module.exports=function(tokens,tt,code){// transform tokens to type \"Template\"\nconvertTemplateType(tokens,tt);var transformedTokens=tokens.filter(function(token){return token.type!==\"CommentLine\"&&token.type!==\"CommentBlock\";});for(var i=0,l=transformedTokens.length;i<l;i++){transformedTokens[i]=toToken(transformedTokens[i],tt,code);}return transformedTokens;};},{\"./convertTemplateType\":14,\"./toToken\":17}],19:[function(require,module,exports){(function(process){var babylonToEspree=require(\"./babylon-to-espree\");var pick=require(\"lodash.pickby\");var Module=require(\"module\");var path=require(\"path\");var parse=require(\"babylon\").parse;var t=require(\"babel-types\");var tt=require(\"babylon\").tokTypes;var traverse=require(\"babel-traverse\").default;var codeFrame=require(\"babel-code-frame\");var hasPatched=false;var eslintOptions={};function createModule(filename){var mod=new Module(filename);mod.filename=filename;mod.paths=Module._nodeModulePaths(path.dirname(filename));return mod;}exports.parse=function(code,options){options=options||{};eslintOptions.ecmaVersion=options.ecmaVersion=options.ecmaVersion||6;eslintOptions.sourceType=options.sourceType=options.sourceType||\"module\";eslintOptions.allowImportExportEverywhere=options.allowImportExportEverywhere=options.allowImportExportEverywhere||false;if(options.sourceType===\"module\"){eslintOptions.globalReturn=false;}else{delete eslintOptions.globalReturn;}return exports.parseNoPatch(code,options);};exports.parseNoPatch=function(code,options){var opts={sourceType:options.sourceType,allowImportExportEverywhere:options.allowImportExportEverywhere,// consistent with espree\nallowReturnOutsideFunction:true,allowSuperOutsideMethod:true,plugins:[\"flow\",\"jsx\",\"asyncFunctions\",\"asyncGenerators\",\"classConstructorCall\",\"classProperties\",\"decorators\",\"doExpressions\",\"exponentiationOperator\",\"exportExtensions\",\"functionBind\",\"functionSent\",\"objectRestSpread\",\"trailingFunctionCommas\",\"dynamicImport\"]};var ast;try{ast=parse(code,opts);}catch(err){if(err instanceof SyntaxError){err.lineNumber=err.loc.line;err.column=err.loc.column+1;// remove trailing \"(LINE:COLUMN)\" acorn message and add in esprima syntax error message start\nerr.message=\"Line \"+err.lineNumber+\": \"+err.message.replace(/ \\((\\d+):(\\d+)\\)$/,\"\")+// add codeframe\n\"\\n\\n\"+codeFrame(code,err.lineNumber,err.column,{highlightCode:true});}throw err;}// remove EOF token, eslint doesn't use this for anything and it interferes with some rules\n// see https://github.com/babel/babel-eslint/issues/2 for more info\n// todo: find a more elegant way to do this\nast.tokens.pop();// convert tokens\nast.tokens=babylonToEspree.toTokens(ast.tokens,tt,code);// add comments\nbabylonToEspree.convertComments(ast.comments);// transform esprima and acorn divergent nodes\nbabylonToEspree.toAST(ast,traverse,code);// ast.program.tokens = ast.tokens;\n// ast.program.comments = ast.comments;\n// ast = ast.program;\n// remove File\nast.type=\"Program\";ast.sourceType=ast.program.sourceType;ast.directives=ast.program.directives;ast.body=ast.program.body;delete ast.program;delete ast._paths;babylonToEspree.attachComments(ast,ast.comments,ast.tokens);return ast;};}).call(this,require(\"_process\"));},{\"./babylon-to-espree\":15,\"_process\":594,\"babel-code-frame\":12,\"babel-traverse\":23,\"babel-types\":56,\"babylon\":74,\"lodash.pickby\":420,\"module\":75,\"path\":587}],20:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.scope=exports.path=undefined;var _weakMap=require(\"babel-runtime/core-js/weak-map\");var _weakMap2=_interopRequireDefault(_weakMap);exports.clear=clear;exports.clearPath=clearPath;exports.clearScope=clearScope;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var path=exports.path=new _weakMap2.default();var scope=exports.scope=new _weakMap2.default();function clear(){clearPath();clearScope();}function clearPath(){exports.path=path=new _weakMap2.default();}function clearScope(){exports.scope=scope=new _weakMap2.default();}},{\"babel-runtime/core-js/weak-map\":71}],21:[function(require,module,exports){(function(process){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);var _classCallCheck2=require(\"babel-runtime/helpers/classCallCheck\");var _classCallCheck3=_interopRequireDefault(_classCallCheck2);var _path2=require(\"./path\");var _path3=_interopRequireDefault(_path2);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var testing=process.env.NODE_ENV===\"test\";var TraversalContext=function(){function TraversalContext(scope,opts,state,parentPath){(0,_classCallCheck3.default)(this,TraversalContext);this.queue=null;this.parentPath=parentPath;this.scope=scope;this.state=state;this.opts=opts;}TraversalContext.prototype.shouldVisit=function shouldVisit(node){var opts=this.opts;if(opts.enter||opts.exit)return true;if(opts[node.type])return true;var keys=t.VISITOR_KEYS[node.type];if(!keys||!keys.length)return false;for(var _iterator=keys,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var key=_ref;if(node[key])return true;}return false;};TraversalContext.prototype.create=function create(node,obj,key,listKey){return _path3.default.get({parentPath:this.parentPath,parent:node,container:obj,key:key,listKey:listKey});};TraversalContext.prototype.maybeQueue=function maybeQueue(path,notPriority){if(this.trap){throw new Error(\"Infinite cycle detected\");}if(this.queue){if(notPriority){this.queue.push(path);}else{this.priorityQueue.push(path);}}};TraversalContext.prototype.visitMultiple=function visitMultiple(container,parent,listKey){if(container.length===0)return false;var queue=[];for(var key=0;key<container.length;key++){var node=container[key];if(node&&this.shouldVisit(node)){queue.push(this.create(parent,container,key,listKey));}}return this.visitQueue(queue);};TraversalContext.prototype.visitSingle=function visitSingle(node,key){if(this.shouldVisit(node[key])){return this.visitQueue([this.create(node,node,key)]);}else{return false;}};TraversalContext.prototype.visitQueue=function visitQueue(queue){this.queue=queue;this.priorityQueue=[];var visited=[];var stop=false;for(var _iterator2=queue,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var path=_ref2;path.resync();if(path.contexts.length===0||path.contexts[path.contexts.length-1]!==this){path.pushContext(this);}if(path.key===null)continue;if(testing&&queue.length>=10000){this.trap=true;}if(visited.indexOf(path.node)>=0)continue;visited.push(path.node);if(path.visit()){stop=true;break;}if(this.priorityQueue.length){stop=this.visitQueue(this.priorityQueue);this.priorityQueue=[];this.queue=queue;if(stop)break;}}for(var _iterator3=queue,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator3.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var _path=_ref3;_path.popContext();}this.queue=null;return stop;};TraversalContext.prototype.visit=function visit(node,key){var nodes=node[key];if(!nodes)return false;if(Array.isArray(nodes)){return this.visitMultiple(nodes,node,key);}else{return this.visitSingle(node,key);}};return TraversalContext;}();exports.default=TraversalContext;module.exports=exports[\"default\"];}).call(this,require(\"_process\"));},{\"./path\":30,\"_process\":594,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/helpers/classCallCheck\":72,\"babel-types\":56}],22:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _classCallCheck2=require(\"babel-runtime/helpers/classCallCheck\");var _classCallCheck3=_interopRequireDefault(_classCallCheck2);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var Hub=function Hub(file,options){(0,_classCallCheck3.default)(this,Hub);this.file=file;this.options=options;};exports.default=Hub;module.exports=exports[\"default\"];},{\"babel-runtime/helpers/classCallCheck\":72}],23:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.visitors=exports.Hub=exports.Scope=exports.NodePath=undefined;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);var _path=require(\"./path\");Object.defineProperty(exports,\"NodePath\",{enumerable:true,get:function get(){return _interopRequireDefault(_path).default;}});var _scope=require(\"./scope\");Object.defineProperty(exports,\"Scope\",{enumerable:true,get:function get(){return _interopRequireDefault(_scope).default;}});var _hub=require(\"./hub\");Object.defineProperty(exports,\"Hub\",{enumerable:true,get:function get(){return _interopRequireDefault(_hub).default;}});exports.default=traverse;var _context=require(\"./context\");var _context2=_interopRequireDefault(_context);var _visitors=require(\"./visitors\");var visitors=_interopRequireWildcard(_visitors);var _babelMessages=require(\"babel-messages\");var messages=_interopRequireWildcard(_babelMessages);var _includes=require(\"lodash/includes\");var _includes2=_interopRequireDefault(_includes);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);var _cache=require(\"./cache\");var cache=_interopRequireWildcard(_cache);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}exports.visitors=visitors;function traverse(parent,opts,scope,state,parentPath){if(!parent)return;if(!opts)opts={};if(!opts.noScope&&!scope){if(parent.type!==\"Program\"&&parent.type!==\"File\"){throw new Error(messages.get(\"traverseNeedsParent\",parent.type));}}visitors.explode(opts);traverse.node(parent,opts,scope,state,parentPath);}traverse.visitors=visitors;traverse.verify=visitors.verify;traverse.explode=visitors.explode;traverse.NodePath=require(\"./path\");traverse.Scope=require(\"./scope\");traverse.Hub=require(\"./hub\");traverse.cheap=function(node,enter){return t.traverseFast(node,enter);};traverse.node=function(node,opts,scope,state,parentPath,skipKeys){var keys=t.VISITOR_KEYS[node.type];if(!keys)return;var context=new _context2.default(scope,opts,state,parentPath);for(var _iterator=keys,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var key=_ref;if(skipKeys&&skipKeys[key])continue;if(context.visit(node,key))return;}};traverse.clearNode=function(node,opts){t.removeProperties(node,opts);cache.path.delete(node);};traverse.removeProperties=function(tree,opts){t.traverseFast(tree,traverse.clearNode,opts);return tree;};function hasBlacklistedType(path,state){if(path.node.type===state.type){state.has=true;path.stop();}}traverse.hasType=function(tree,scope,type,blacklistTypes){if((0,_includes2.default)(blacklistTypes,tree.type))return false;if(tree.type===type)return true;var state={has:false,type:type};traverse(tree,{blacklist:blacklistTypes,enter:hasBlacklistedType},scope,state);return state.has;};traverse.clearCache=function(){cache.clear();};traverse.clearCache.clearPath=cache.clearPath;traverse.clearCache.clearScope=cache.clearScope;traverse.copyCache=function(source,destination){if(cache.path.has(source)){cache.path.set(destination,cache.path.get(source));}};},{\"./cache\":20,\"./context\":21,\"./hub\":22,\"./path\":30,\"./scope\":42,\"./visitors\":44,\"babel-messages\":60,\"babel-runtime/core-js/get-iterator\":61,\"babel-types\":56,\"lodash/includes\":550}],24:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.findParent=findParent;exports.find=find;exports.getFunctionParent=getFunctionParent;exports.getStatementParent=getStatementParent;exports.getEarliestCommonAncestorFrom=getEarliestCommonAncestorFrom;exports.getDeepestCommonAncestorFrom=getDeepestCommonAncestorFrom;exports.getAncestry=getAncestry;exports.isAncestor=isAncestor;exports.isDescendant=isDescendant;exports.inType=inType;exports.inShadow=inShadow;var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function findParent(callback){var path=this;while(path=path.parentPath){if(callback(path))return path;}return null;}function find(callback){var path=this;do{if(callback(path))return path;}while(path=path.parentPath);return null;}function getFunctionParent(){return this.findParent(function(path){return path.isFunction()||path.isProgram();});}function getStatementParent(){var path=this;do{if(Array.isArray(path.container)){return path;}}while(path=path.parentPath);}function getEarliestCommonAncestorFrom(paths){return this.getDeepestCommonAncestorFrom(paths,function(deepest,i,ancestries){var earliest=void 0;var keys=t.VISITOR_KEYS[deepest.type];for(var _iterator=ancestries,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var ancestry=_ref;var path=ancestry[i+1];if(!earliest){earliest=path;continue;}if(path.listKey&&earliest.listKey===path.listKey){if(path.key<earliest.key){earliest=path;continue;}}var earliestKeyIndex=keys.indexOf(earliest.parentKey);var currentKeyIndex=keys.indexOf(path.parentKey);if(earliestKeyIndex>currentKeyIndex){earliest=path;}}return earliest;});}function getDeepestCommonAncestorFrom(paths,filter){var _this=this;if(!paths.length){return this;}if(paths.length===1){return paths[0];}var minDepth=Infinity;var lastCommonIndex=void 0,lastCommon=void 0;var ancestries=paths.map(function(path){var ancestry=[];do{ancestry.unshift(path);}while((path=path.parentPath)&&path!==_this);if(ancestry.length<minDepth){minDepth=ancestry.length;}return ancestry;});var first=ancestries[0];depthLoop:for(var i=0;i<minDepth;i++){var shouldMatch=first[i];for(var _iterator2=ancestries,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var ancestry=_ref2;if(ancestry[i]!==shouldMatch){break depthLoop;}}lastCommonIndex=i;lastCommon=shouldMatch;}if(lastCommon){if(filter){return filter(lastCommon,lastCommonIndex,ancestries);}else{return lastCommon;}}else{throw new Error(\"Couldn't find intersection\");}}function getAncestry(){var path=this;var paths=[];do{paths.push(path);}while(path=path.parentPath);return paths;}function isAncestor(maybeDescendant){return maybeDescendant.isDescendant(this);}function isDescendant(maybeAncestor){return!!this.findParent(function(parent){return parent===maybeAncestor;});}function inType(){var path=this;while(path){for(var _iterator3=arguments,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator3.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var type=_ref3;if(path.node.type===type)return true;}path=path.parentPath;}return false;}function inShadow(key){var parentFn=this.isFunction()?this:this.findParent(function(p){return p.isFunction();});if(!parentFn)return;if(parentFn.isFunctionExpression()||parentFn.isFunctionDeclaration()){var shadow=parentFn.node.shadow;if(shadow&&(!key||shadow[key]!==false)){return parentFn;}}else if(parentFn.isArrowFunctionExpression()){return parentFn;}return null;}},{\"./index\":30,\"babel-runtime/core-js/get-iterator\":61,\"babel-types\":56}],25:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.shareCommentsWithSiblings=shareCommentsWithSiblings;exports.addComment=addComment;exports.addComments=addComments;function shareCommentsWithSiblings(){if(typeof this.key===\"string\")return;var node=this.node;if(!node)return;var trailing=node.trailingComments;var leading=node.leadingComments;if(!trailing&&!leading)return;var prev=this.getSibling(this.key-1);var next=this.getSibling(this.key+1);if(!prev.node)prev=next;if(!next.node)next=prev;prev.addComments(\"trailing\",leading);next.addComments(\"leading\",trailing);}function addComment(type,content,line){this.addComments(type,[{type:line?\"CommentLine\":\"CommentBlock\",value:content}]);}function addComments(type,comments){if(!comments)return;var node=this.node;if(!node)return;var key=type+\"Comments\";if(node[key]){node[key]=node[key].concat(comments);}else{node[key]=comments;}}},{}],26:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.call=call;exports._call=_call;exports.isBlacklisted=isBlacklisted;exports.visit=visit;exports.skip=skip;exports.skipKey=skipKey;exports.stop=stop;exports.setScope=setScope;exports.setContext=setContext;exports.resync=resync;exports._resyncParent=_resyncParent;exports._resyncKey=_resyncKey;exports._resyncList=_resyncList;exports._resyncRemoved=_resyncRemoved;exports.popContext=popContext;exports.pushContext=pushContext;exports.setup=setup;exports.setKey=setKey;exports.requeue=requeue;exports._getQueueContexts=_getQueueContexts;var _index=require(\"../index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function call(key){var opts=this.opts;this.debug(function(){return key;});if(this.node){if(this._call(opts[key]))return true;}if(this.node){return this._call(opts[this.node.type]&&opts[this.node.type][key]);}return false;}function _call(fns){if(!fns)return false;for(var _iterator=fns,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var fn=_ref;if(!fn)continue;var node=this.node;if(!node)return true;var ret=fn.call(this.state,this,this.state);if(ret)throw new Error(\"Unexpected return value from visitor method \"+fn);if(this.node!==node)return true;if(this.shouldStop||this.shouldSkip||this.removed)return true;}return false;}function isBlacklisted(){var blacklist=this.opts.blacklist;return blacklist&&blacklist.indexOf(this.node.type)>-1;}function visit(){if(!this.node){return false;}if(this.isBlacklisted()){return false;}if(this.opts.shouldSkip&&this.opts.shouldSkip(this)){return false;}if(this.call(\"enter\")||this.shouldSkip){this.debug(function(){return\"Skip...\";});return this.shouldStop;}this.debug(function(){return\"Recursing into...\";});_index2.default.node(this.node,this.opts,this.scope,this.state,this,this.skipKeys);this.call(\"exit\");return this.shouldStop;}function skip(){this.shouldSkip=true;}function skipKey(key){this.skipKeys[key]=true;}function stop(){this.shouldStop=true;this.shouldSkip=true;}function setScope(){if(this.opts&&this.opts.noScope)return;var target=this.context&&this.context.scope;if(!target){var path=this.parentPath;while(path&&!target){if(path.opts&&path.opts.noScope)return;target=path.scope;path=path.parentPath;}}this.scope=this.getScope(target);if(this.scope)this.scope.init();}function setContext(context){this.shouldSkip=false;this.shouldStop=false;this.removed=false;this.skipKeys={};if(context){this.context=context;this.state=context.state;this.opts=context.opts;}this.setScope();return this;}function resync(){if(this.removed)return;this._resyncParent();this._resyncList();this._resyncKey();}function _resyncParent(){if(this.parentPath){this.parent=this.parentPath.node;}}function _resyncKey(){if(!this.container)return;if(this.node===this.container[this.key])return;if(Array.isArray(this.container)){for(var i=0;i<this.container.length;i++){if(this.container[i]===this.node){return this.setKey(i);}}}else{for(var key in this.container){if(this.container[key]===this.node){return this.setKey(key);}}}this.key=null;}function _resyncList(){if(!this.parent||!this.inList)return;var newContainer=this.parent[this.listKey];if(this.container===newContainer)return;this.container=newContainer||null;}function _resyncRemoved(){if(this.key==null||!this.container||this.container[this.key]!==this.node){this._markRemoved();}}function popContext(){this.contexts.pop();this.setContext(this.contexts[this.contexts.length-1]);}function pushContext(context){this.contexts.push(context);this.setContext(context);}function setup(parentPath,container,listKey,key){this.inList=!!listKey;this.listKey=listKey;this.parentKey=listKey||key;this.container=container;this.parentPath=parentPath||this.parentPath;this.setKey(key);}function setKey(key){this.key=key;this.node=this.container[this.key];this.type=this.node&&this.node.type;}function requeue(){var pathToQueue=arguments.length>0&&arguments[0]!==undefined?arguments[0]:this;if(pathToQueue.removed)return;var contexts=this.contexts;for(var _iterator2=contexts,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var context=_ref2;context.maybeQueue(pathToQueue);}}function _getQueueContexts(){var path=this;var contexts=this.contexts;while(!contexts.length){path=path.parentPath;contexts=path.contexts;}return contexts;}},{\"../index\":23,\"babel-runtime/core-js/get-iterator\":61}],27:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.toComputedKey=toComputedKey;exports.ensureBlock=ensureBlock;exports.arrowFunctionToShadowed=arrowFunctionToShadowed;var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function toComputedKey(){var node=this.node;var key=void 0;if(this.isMemberExpression()){key=node.property;}else if(this.isProperty()||this.isMethod()){key=node.key;}else{throw new ReferenceError(\"todo\");}if(!node.computed){if(t.isIdentifier(key))key=t.stringLiteral(key.name);}return key;}function ensureBlock(){return t.ensureBlock(this.node);}function arrowFunctionToShadowed(){if(!this.isArrowFunctionExpression())return;this.ensureBlock();var node=this.node;node.expression=false;node.type=\"FunctionExpression\";node.shadow=node.shadow||true;}},{\"babel-types\":56}],28:[function(require,module,exports){(function(global){\"use strict\";exports.__esModule=true;var _typeof2=require(\"babel-runtime/helpers/typeof\");var _typeof3=_interopRequireDefault(_typeof2);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);var _map=require(\"babel-runtime/core-js/map\");var _map2=_interopRequireDefault(_map);exports.evaluateTruthy=evaluateTruthy;exports.evaluate=evaluate;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var VALID_CALLEES=[\"String\",\"Number\",\"Math\"];var INVALID_METHODS=[\"random\"];function evaluateTruthy(){var res=this.evaluate();if(res.confident)return!!res.value;}function evaluate(){var confident=true;var deoptPath=void 0;var seen=new _map2.default();function deopt(path){if(!confident)return;deoptPath=path;confident=false;}var value=evaluate(this);if(!confident)value=undefined;return{confident:confident,deopt:deoptPath,value:value};function evaluate(path){var node=path.node;if(seen.has(node)){var existing=seen.get(node);if(existing.resolved){return existing.value;}else{deopt(path);return;}}else{var item={resolved:false};seen.set(node,item);var val=_evaluate(path);if(confident){item.resolved=true;item.value=val;}return val;}}function _evaluate(path){if(!confident)return;var node=path.node;if(path.isSequenceExpression()){var exprs=path.get(\"expressions\");return evaluate(exprs[exprs.length-1]);}if(path.isStringLiteral()||path.isNumericLiteral()||path.isBooleanLiteral()){return node.value;}if(path.isNullLiteral()){return null;}if(path.isTemplateLiteral()){var str=\"\";var i=0;var _exprs=path.get(\"expressions\");for(var _iterator=node.quasis,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var elem=_ref;if(!confident)break;str+=elem.value.cooked;var expr=_exprs[i++];if(expr)str+=String(evaluate(expr));}if(!confident)return;return str;}if(path.isConditionalExpression()){var testResult=evaluate(path.get(\"test\"));if(!confident)return;if(testResult){return evaluate(path.get(\"consequent\"));}else{return evaluate(path.get(\"alternate\"));}}if(path.isExpressionWrapper()){return evaluate(path.get(\"expression\"));}if(path.isMemberExpression()&&!path.parentPath.isCallExpression({callee:node})){var property=path.get(\"property\");var object=path.get(\"object\");if(object.isLiteral()&&property.isIdentifier()){var _value=object.node.value;var type=typeof _value===\"undefined\"?\"undefined\":(0,_typeof3.default)(_value);if(type===\"number\"||type===\"string\"){return _value[property.node.name];}}}if(path.isReferencedIdentifier()){var binding=path.scope.getBinding(node.name);if(binding&&binding.constantViolations.length>0){return deopt(binding.path);}if(binding&&path.node.start<binding.path.node.end){return deopt(binding.path);}if(binding&&binding.hasValue){return binding.value;}else{if(node.name===\"undefined\"){return binding?deopt(binding.path):undefined;}else if(node.name===\"Infinity\"){return binding?deopt(binding.path):Infinity;}else if(node.name===\"NaN\"){return binding?deopt(binding.path):NaN;}var resolved=path.resolve();if(resolved===path){return deopt(path);}else{return evaluate(resolved);}}}if(path.isUnaryExpression({prefix:true})){if(node.operator===\"void\"){return undefined;}var argument=path.get(\"argument\");if(node.operator===\"typeof\"&&(argument.isFunction()||argument.isClass())){return\"function\";}var arg=evaluate(argument);if(!confident)return;switch(node.operator){case\"!\":return!arg;case\"+\":return+arg;case\"-\":return-arg;case\"~\":return~arg;case\"typeof\":return typeof arg===\"undefined\"?\"undefined\":(0,_typeof3.default)(arg);}}if(path.isArrayExpression()){var arr=[];var elems=path.get(\"elements\");for(var _iterator2=elems,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var _elem=_ref2;_elem=_elem.evaluate();if(_elem.confident){arr.push(_elem.value);}else{return deopt(_elem);}}return arr;}if(path.isObjectExpression()){var obj={};var props=path.get(\"properties\");for(var _iterator3=props,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator3.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var prop=_ref3;if(prop.isObjectMethod()||prop.isSpreadProperty()){return deopt(prop);}var keyPath=prop.get(\"key\");var key=keyPath;if(prop.node.computed){key=key.evaluate();if(!key.confident){return deopt(keyPath);}key=key.value;}else if(key.isIdentifier()){key=key.node.name;}else{key=key.node.value;}var valuePath=prop.get(\"value\");var _value2=valuePath.evaluate();if(!_value2.confident){return deopt(valuePath);}_value2=_value2.value;obj[key]=_value2;}return obj;}if(path.isLogicalExpression()){var wasConfident=confident;var left=evaluate(path.get(\"left\"));var leftConfident=confident;confident=wasConfident;var right=evaluate(path.get(\"right\"));var rightConfident=confident;confident=leftConfident&&rightConfident;switch(node.operator){case\"||\":if(left&&leftConfident){confident=true;return left;}if(!confident)return;return left||right;case\"&&\":if(!left&&leftConfident||!right&&rightConfident){confident=true;}if(!confident)return;return left&&right;}}if(path.isBinaryExpression()){var _left=evaluate(path.get(\"left\"));if(!confident)return;var _right=evaluate(path.get(\"right\"));if(!confident)return;switch(node.operator){case\"-\":return _left-_right;case\"+\":return _left+_right;case\"/\":return _left/_right;case\"*\":return _left*_right;case\"%\":return _left%_right;case\"**\":return Math.pow(_left,_right);case\"<\":return _left<_right;case\">\":return _left>_right;case\"<=\":return _left<=_right;case\">=\":return _left>=_right;case\"==\":return _left==_right;case\"!=\":return _left!=_right;case\"===\":return _left===_right;case\"!==\":return _left!==_right;case\"|\":return _left|_right;case\"&\":return _left&_right;case\"^\":return _left^_right;case\"<<\":return _left<<_right;case\">>\":return _left>>_right;case\">>>\":return _left>>>_right;}}if(path.isCallExpression()){var callee=path.get(\"callee\");var context=void 0;var func=void 0;if(callee.isIdentifier()&&!path.scope.getBinding(callee.node.name,true)&&VALID_CALLEES.indexOf(callee.node.name)>=0){func=global[node.callee.name];}if(callee.isMemberExpression()){var _object=callee.get(\"object\");var _property=callee.get(\"property\");if(_object.isIdentifier()&&_property.isIdentifier()&&VALID_CALLEES.indexOf(_object.node.name)>=0&&INVALID_METHODS.indexOf(_property.node.name)<0){context=global[_object.node.name];func=context[_property.node.name];}if(_object.isLiteral()&&_property.isIdentifier()){var _type=(0,_typeof3.default)(_object.node.value);if(_type===\"string\"||_type===\"number\"){context=_object.node.value;func=context[_property.node.name];}}}if(func){var args=path.get(\"arguments\").map(evaluate);if(!confident)return;return func.apply(context,args);}}deopt(path);}}}).call(this,typeof global!==\"undefined\"?global:typeof self!==\"undefined\"?self:typeof window!==\"undefined\"?window:{});},{\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/core-js/map\":63,\"babel-runtime/helpers/typeof\":73}],29:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _create=require(\"babel-runtime/core-js/object/create\");var _create2=_interopRequireDefault(_create);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.getStatementParent=getStatementParent;exports.getOpposite=getOpposite;exports.getCompletionRecords=getCompletionRecords;exports.getSibling=getSibling;exports.getPrevSibling=getPrevSibling;exports.getNextSibling=getNextSibling;exports.getAllNextSiblings=getAllNextSiblings;exports.getAllPrevSiblings=getAllPrevSiblings;exports.get=get;exports._getKey=_getKey;exports._getPattern=_getPattern;exports.getBindingIdentifiers=getBindingIdentifiers;exports.getOuterBindingIdentifiers=getOuterBindingIdentifiers;exports.getBindingIdentifierPaths=getBindingIdentifierPaths;exports.getOuterBindingIdentifierPaths=getOuterBindingIdentifierPaths;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function getStatementParent(){var path=this;do{if(!path.parentPath||Array.isArray(path.container)&&path.isStatement()){break;}else{path=path.parentPath;}}while(path);if(path&&(path.isProgram()||path.isFile())){throw new Error(\"File/Program node, we can't possibly find a statement parent to this\");}return path;}function getOpposite(){if(this.key===\"left\"){return this.getSibling(\"right\");}else if(this.key===\"right\"){return this.getSibling(\"left\");}}function getCompletionRecords(){var paths=[];var add=function add(path){if(path)paths=paths.concat(path.getCompletionRecords());};if(this.isIfStatement()){add(this.get(\"consequent\"));add(this.get(\"alternate\"));}else if(this.isDoExpression()||this.isFor()||this.isWhile()){add(this.get(\"body\"));}else if(this.isProgram()||this.isBlockStatement()){add(this.get(\"body\").pop());}else if(this.isFunction()){return this.get(\"body\").getCompletionRecords();}else if(this.isTryStatement()){add(this.get(\"block\"));add(this.get(\"handler\"));add(this.get(\"finalizer\"));}else{paths.push(this);}return paths;}function getSibling(key){return _index2.default.get({parentPath:this.parentPath,parent:this.parent,container:this.container,listKey:this.listKey,key:key});}function getPrevSibling(){return this.getSibling(this.key-1);}function getNextSibling(){return this.getSibling(this.key+1);}function getAllNextSiblings(){var _key=this.key;var sibling=this.getSibling(++_key);var siblings=[];while(sibling.node){siblings.push(sibling);sibling=this.getSibling(++_key);}return siblings;}function getAllPrevSiblings(){var _key=this.key;var sibling=this.getSibling(--_key);var siblings=[];while(sibling.node){siblings.push(sibling);sibling=this.getSibling(--_key);}return siblings;}function get(key,context){if(context===true)context=this.context;var parts=key.split(\".\");if(parts.length===1){return this._getKey(key,context);}else{return this._getPattern(parts,context);}}function _getKey(key,context){var _this=this;var node=this.node;var container=node[key];if(Array.isArray(container)){return container.map(function(_,i){return _index2.default.get({listKey:key,parentPath:_this,parent:node,container:container,key:i}).setContext(context);});}else{return _index2.default.get({parentPath:this,parent:node,container:node,key:key}).setContext(context);}}function _getPattern(parts,context){var path=this;for(var _iterator=parts,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var part=_ref;if(part===\".\"){path=path.parentPath;}else{if(Array.isArray(path)){path=path[part];}else{path=path.get(part,context);}}}return path;}function getBindingIdentifiers(duplicates){return t.getBindingIdentifiers(this.node,duplicates);}function getOuterBindingIdentifiers(duplicates){return t.getOuterBindingIdentifiers(this.node,duplicates);}function getBindingIdentifierPaths(){var duplicates=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;var outerOnly=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var path=this;var search=[].concat(path);var ids=(0,_create2.default)(null);while(search.length){var id=search.shift();if(!id)continue;if(!id.node)continue;var keys=t.getBindingIdentifiers.keys[id.node.type];if(id.isIdentifier()){if(duplicates){var _ids=ids[id.node.name]=ids[id.node.name]||[];_ids.push(id);}else{ids[id.node.name]=id;}continue;}if(id.isExportDeclaration()){var declaration=id.get(\"declaration\");if(declaration.isDeclaration()){search.push(declaration);}continue;}if(outerOnly){if(id.isFunctionDeclaration()){search.push(id.get(\"id\"));continue;}if(id.isFunctionExpression()){continue;}}if(keys){for(var i=0;i<keys.length;i++){var key=keys[i];var child=id.get(key);if(Array.isArray(child)||child.node){search=search.concat(child);}}}}return ids;}function getOuterBindingIdentifierPaths(duplicates){return this.getBindingIdentifierPaths(duplicates,true);}},{\"./index\":30,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/core-js/object/create\":65,\"babel-types\":56}],30:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);var _classCallCheck2=require(\"babel-runtime/helpers/classCallCheck\");var _classCallCheck3=_interopRequireDefault(_classCallCheck2);var _virtualTypes=require(\"./lib/virtual-types\");var virtualTypes=_interopRequireWildcard(_virtualTypes);var _debug2=require(\"debug\");var _debug3=_interopRequireDefault(_debug2);var _invariant=require(\"invariant\");var _invariant2=_interopRequireDefault(_invariant);var _index=require(\"../index\");var _index2=_interopRequireDefault(_index);var _assign=require(\"lodash/assign\");var _assign2=_interopRequireDefault(_assign);var _scope=require(\"../scope\");var _scope2=_interopRequireDefault(_scope);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);var _cache=require(\"../cache\");function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var _debug=(0,_debug3.default)(\"babel\");var NodePath=function(){function NodePath(hub,parent){(0,_classCallCheck3.default)(this,NodePath);this.parent=parent;this.hub=hub;this.contexts=[];this.data={};this.shouldSkip=false;this.shouldStop=false;this.removed=false;this.state=null;this.opts=null;this.skipKeys=null;this.parentPath=null;this.context=null;this.container=null;this.listKey=null;this.inList=false;this.parentKey=null;this.key=null;this.node=null;this.scope=null;this.type=null;this.typeAnnotation=null;}NodePath.get=function get(_ref){var hub=_ref.hub,parentPath=_ref.parentPath,parent=_ref.parent,container=_ref.container,listKey=_ref.listKey,key=_ref.key;if(!hub&&parentPath){hub=parentPath.hub;}(0,_invariant2.default)(parent,\"To get a node path the parent needs to exist\");var targetNode=container[key];var paths=_cache.path.get(parent)||[];if(!_cache.path.has(parent)){_cache.path.set(parent,paths);}var path=void 0;for(var i=0;i<paths.length;i++){var pathCheck=paths[i];if(pathCheck.node===targetNode){path=pathCheck;break;}}if(!path){path=new NodePath(hub,parent);paths.push(path);}path.setup(parentPath,container,listKey,key);return path;};NodePath.prototype.getScope=function getScope(scope){var ourScope=scope;if(this.isScope()){ourScope=new _scope2.default(this,scope);}return ourScope;};NodePath.prototype.setData=function setData(key,val){return this.data[key]=val;};NodePath.prototype.getData=function getData(key,def){var val=this.data[key];if(!val&&def)val=this.data[key]=def;return val;};NodePath.prototype.buildCodeFrameError=function buildCodeFrameError(msg){var Error=arguments.length>1&&arguments[1]!==undefined?arguments[1]:SyntaxError;return this.hub.file.buildCodeFrameError(this.node,msg,Error);};NodePath.prototype.traverse=function traverse(visitor,state){(0,_index2.default)(this.node,visitor,this.scope,state,this);};NodePath.prototype.mark=function mark(type,message){this.hub.file.metadata.marked.push({type:type,message:message,loc:this.node.loc});};NodePath.prototype.set=function set(key,node){t.validate(this.node,key,node);this.node[key]=node;};NodePath.prototype.getPathLocation=function getPathLocation(){var parts=[];var path=this;do{var key=path.key;if(path.inList)key=path.listKey+\"[\"+key+\"]\";parts.unshift(key);}while(path=path.parentPath);return parts.join(\".\");};NodePath.prototype.debug=function debug(buildMessage){if(!_debug.enabled)return;_debug(this.getPathLocation()+\" \"+this.type+\": \"+buildMessage());};return NodePath;}();exports.default=NodePath;(0,_assign2.default)(NodePath.prototype,require(\"./ancestry\"));(0,_assign2.default)(NodePath.prototype,require(\"./inference\"));(0,_assign2.default)(NodePath.prototype,require(\"./replacement\"));(0,_assign2.default)(NodePath.prototype,require(\"./evaluation\"));(0,_assign2.default)(NodePath.prototype,require(\"./conversion\"));(0,_assign2.default)(NodePath.prototype,require(\"./introspection\"));(0,_assign2.default)(NodePath.prototype,require(\"./context\"));(0,_assign2.default)(NodePath.prototype,require(\"./removal\"));(0,_assign2.default)(NodePath.prototype,require(\"./modification\"));(0,_assign2.default)(NodePath.prototype,require(\"./family\"));(0,_assign2.default)(NodePath.prototype,require(\"./comments\"));var _loop2=function _loop2(){if(_isArray){if(_i>=_iterator.length)return\"break\";_ref2=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)return\"break\";_ref2=_i.value;}var type=_ref2;var typeKey=\"is\"+type;NodePath.prototype[typeKey]=function(opts){return t[typeKey](this.node,opts);};NodePath.prototype[\"assert\"+type]=function(opts){if(!this[typeKey](opts)){throw new TypeError(\"Expected node path of type \"+type);}};};for(var _iterator=t.TYPES,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref2;var _ret2=_loop2();if(_ret2===\"break\")break;}var _loop=function _loop(type){if(type[0]===\"_\")return\"continue\";if(t.TYPES.indexOf(type)<0)t.TYPES.push(type);var virtualType=virtualTypes[type];NodePath.prototype[\"is\"+type]=function(opts){return virtualType.checkPath(this,opts);};};for(var type in virtualTypes){var _ret=_loop(type);if(_ret===\"continue\")continue;}module.exports=exports[\"default\"];},{\"../cache\":20,\"../index\":23,\"../scope\":42,\"./ancestry\":24,\"./comments\":25,\"./context\":26,\"./conversion\":27,\"./evaluation\":28,\"./family\":29,\"./inference\":31,\"./introspection\":34,\"./lib/virtual-types\":37,\"./modification\":38,\"./removal\":39,\"./replacement\":40,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/helpers/classCallCheck\":72,\"babel-types\":56,\"debug\":179,\"invariant\":378,\"lodash/assign\":543}],31:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.getTypeAnnotation=getTypeAnnotation;exports._getTypeAnnotation=_getTypeAnnotation;exports.isBaseType=isBaseType;exports.couldBeBaseType=couldBeBaseType;exports.baseTypeStrictlyMatches=baseTypeStrictlyMatches;exports.isGenericType=isGenericType;var _inferers=require(\"./inferers\");var inferers=_interopRequireWildcard(_inferers);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function getTypeAnnotation(){if(this.typeAnnotation)return this.typeAnnotation;var type=this._getTypeAnnotation()||t.anyTypeAnnotation();if(t.isTypeAnnotation(type))type=type.typeAnnotation;return this.typeAnnotation=type;}function _getTypeAnnotation(){var node=this.node;if(!node){if(this.key===\"init\"&&this.parentPath.isVariableDeclarator()){var declar=this.parentPath.parentPath;var declarParent=declar.parentPath;if(declar.key===\"left\"&&declarParent.isForInStatement()){return t.stringTypeAnnotation();}if(declar.key===\"left\"&&declarParent.isForOfStatement()){return t.anyTypeAnnotation();}return t.voidTypeAnnotation();}else{return;}}if(node.typeAnnotation){return node.typeAnnotation;}var inferer=inferers[node.type];if(inferer){return inferer.call(this,node);}inferer=inferers[this.parentPath.type];if(inferer&&inferer.validParent){return this.parentPath.getTypeAnnotation();}}function isBaseType(baseName,soft){return _isBaseType(baseName,this.getTypeAnnotation(),soft);}function _isBaseType(baseName,type,soft){if(baseName===\"string\"){return t.isStringTypeAnnotation(type);}else if(baseName===\"number\"){return t.isNumberTypeAnnotation(type);}else if(baseName===\"boolean\"){return t.isBooleanTypeAnnotation(type);}else if(baseName===\"any\"){return t.isAnyTypeAnnotation(type);}else if(baseName===\"mixed\"){return t.isMixedTypeAnnotation(type);}else if(baseName===\"empty\"){return t.isEmptyTypeAnnotation(type);}else if(baseName===\"void\"){return t.isVoidTypeAnnotation(type);}else{if(soft){return false;}else{throw new Error(\"Unknown base type \"+baseName);}}}function couldBeBaseType(name){var type=this.getTypeAnnotation();if(t.isAnyTypeAnnotation(type))return true;if(t.isUnionTypeAnnotation(type)){for(var _iterator=type.types,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var type2=_ref;if(t.isAnyTypeAnnotation(type2)||_isBaseType(name,type2,true)){return true;}}return false;}else{return _isBaseType(name,type,true);}}function baseTypeStrictlyMatches(right){var left=this.getTypeAnnotation();right=right.getTypeAnnotation();if(!t.isAnyTypeAnnotation(left)&&t.isFlowBaseAnnotation(left)){return right.type===left.type;}}function isGenericType(genericName){var type=this.getTypeAnnotation();return t.isGenericTypeAnnotation(type)&&t.isIdentifier(type.id,{name:genericName});}},{\"./inferers\":33,\"babel-runtime/core-js/get-iterator\":61,\"babel-types\":56}],32:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.default=function(node){if(!this.isReferenced())return;var binding=this.scope.getBinding(node.name);if(binding){if(binding.identifier.typeAnnotation){return binding.identifier.typeAnnotation;}else{return getTypeAnnotationBindingConstantViolations(this,node.name);}}if(node.name===\"undefined\"){return t.voidTypeAnnotation();}else if(node.name===\"NaN\"||node.name===\"Infinity\"){return t.numberTypeAnnotation();}else if(node.name===\"arguments\"){}};var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function getTypeAnnotationBindingConstantViolations(path,name){var binding=path.scope.getBinding(name);var types=[];path.typeAnnotation=t.unionTypeAnnotation(types);var functionConstantViolations=[];var constantViolations=getConstantViolationsBefore(binding,path,functionConstantViolations);var testType=getConditionalAnnotation(path,name);if(testType){(function(){var testConstantViolations=getConstantViolationsBefore(binding,testType.ifStatement);constantViolations=constantViolations.filter(function(path){return testConstantViolations.indexOf(path)<0;});types.push(testType.typeAnnotation);})();}if(constantViolations.length){constantViolations=constantViolations.concat(functionConstantViolations);for(var _iterator=constantViolations,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var violation=_ref;types.push(violation.getTypeAnnotation());}}if(types.length){return t.createUnionTypeAnnotation(types);}}function getConstantViolationsBefore(binding,path,functions){var violations=binding.constantViolations.slice();violations.unshift(binding.path);return violations.filter(function(violation){violation=violation.resolve();var status=violation._guessExecutionStatusRelativeTo(path);if(functions&&status===\"function\")functions.push(violation);return status===\"before\";});}function inferAnnotationFromBinaryExpression(name,path){var operator=path.node.operator;var right=path.get(\"right\").resolve();var left=path.get(\"left\").resolve();var target=void 0;if(left.isIdentifier({name:name})){target=right;}else if(right.isIdentifier({name:name})){target=left;}if(target){if(operator===\"===\"){return target.getTypeAnnotation();}else if(t.BOOLEAN_NUMBER_BINARY_OPERATORS.indexOf(operator)>=0){return t.numberTypeAnnotation();}else{return;}}else{if(operator!==\"===\")return;}var typeofPath=void 0;var typePath=void 0;if(left.isUnaryExpression({operator:\"typeof\"})){typeofPath=left;typePath=right;}else if(right.isUnaryExpression({operator:\"typeof\"})){typeofPath=right;typePath=left;}if(!typePath&&!typeofPath)return;typePath=typePath.resolve();if(!typePath.isLiteral())return;var typeValue=typePath.node.value;if(typeof typeValue!==\"string\")return;if(!typeofPath.get(\"argument\").isIdentifier({name:name}))return;return t.createTypeAnnotationBasedOnTypeof(typePath.node.value);}function getParentConditionalPath(path){var parentPath=void 0;while(parentPath=path.parentPath){if(parentPath.isIfStatement()||parentPath.isConditionalExpression()){if(path.key===\"test\"){return;}else{return parentPath;}}else{path=parentPath;}}}function getConditionalAnnotation(path,name){var ifStatement=getParentConditionalPath(path);if(!ifStatement)return;var test=ifStatement.get(\"test\");var paths=[test];var types=[];do{var _path=paths.shift().resolve();if(_path.isLogicalExpression()){paths.push(_path.get(\"left\"));paths.push(_path.get(\"right\"));}if(_path.isBinaryExpression()){var type=inferAnnotationFromBinaryExpression(name,_path);if(type)types.push(type);}}while(paths.length);if(types.length){return{typeAnnotation:t.createUnionTypeAnnotation(types),ifStatement:ifStatement};}else{return getConditionalAnnotation(ifStatement,name);}}module.exports=exports[\"default\"];},{\"babel-runtime/core-js/get-iterator\":61,\"babel-types\":56}],33:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.ClassDeclaration=exports.ClassExpression=exports.FunctionDeclaration=exports.ArrowFunctionExpression=exports.FunctionExpression=exports.Identifier=undefined;var _infererReference=require(\"./inferer-reference\");Object.defineProperty(exports,\"Identifier\",{enumerable:true,get:function get(){return _interopRequireDefault(_infererReference).default;}});exports.VariableDeclarator=VariableDeclarator;exports.TypeCastExpression=TypeCastExpression;exports.NewExpression=NewExpression;exports.TemplateLiteral=TemplateLiteral;exports.UnaryExpression=UnaryExpression;exports.BinaryExpression=BinaryExpression;exports.LogicalExpression=LogicalExpression;exports.ConditionalExpression=ConditionalExpression;exports.SequenceExpression=SequenceExpression;exports.AssignmentExpression=AssignmentExpression;exports.UpdateExpression=UpdateExpression;exports.StringLiteral=StringLiteral;exports.NumericLiteral=NumericLiteral;exports.BooleanLiteral=BooleanLiteral;exports.NullLiteral=NullLiteral;exports.RegExpLiteral=RegExpLiteral;exports.ObjectExpression=ObjectExpression;exports.ArrayExpression=ArrayExpression;exports.RestElement=RestElement;exports.CallExpression=CallExpression;exports.TaggedTemplateExpression=TaggedTemplateExpression;var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function VariableDeclarator(){var id=this.get(\"id\");if(id.isIdentifier()){return this.get(\"init\").getTypeAnnotation();}else{return;}}function TypeCastExpression(node){return node.typeAnnotation;}TypeCastExpression.validParent=true;function NewExpression(node){if(this.get(\"callee\").isIdentifier()){return t.genericTypeAnnotation(node.callee);}}function TemplateLiteral(){return t.stringTypeAnnotation();}function UnaryExpression(node){var operator=node.operator;if(operator===\"void\"){return t.voidTypeAnnotation();}else if(t.NUMBER_UNARY_OPERATORS.indexOf(operator)>=0){return t.numberTypeAnnotation();}else if(t.STRING_UNARY_OPERATORS.indexOf(operator)>=0){return t.stringTypeAnnotation();}else if(t.BOOLEAN_UNARY_OPERATORS.indexOf(operator)>=0){return t.booleanTypeAnnotation();}}function BinaryExpression(node){var operator=node.operator;if(t.NUMBER_BINARY_OPERATORS.indexOf(operator)>=0){return t.numberTypeAnnotation();}else if(t.BOOLEAN_BINARY_OPERATORS.indexOf(operator)>=0){return t.booleanTypeAnnotation();}else if(operator===\"+\"){var right=this.get(\"right\");var left=this.get(\"left\");if(left.isBaseType(\"number\")&&right.isBaseType(\"number\")){return t.numberTypeAnnotation();}else if(left.isBaseType(\"string\")||right.isBaseType(\"string\")){return t.stringTypeAnnotation();}return t.unionTypeAnnotation([t.stringTypeAnnotation(),t.numberTypeAnnotation()]);}}function LogicalExpression(){return t.createUnionTypeAnnotation([this.get(\"left\").getTypeAnnotation(),this.get(\"right\").getTypeAnnotation()]);}function ConditionalExpression(){return t.createUnionTypeAnnotation([this.get(\"consequent\").getTypeAnnotation(),this.get(\"alternate\").getTypeAnnotation()]);}function SequenceExpression(){return this.get(\"expressions\").pop().getTypeAnnotation();}function AssignmentExpression(){return this.get(\"right\").getTypeAnnotation();}function UpdateExpression(node){var operator=node.operator;if(operator===\"++\"||operator===\"--\"){return t.numberTypeAnnotation();}}function StringLiteral(){return t.stringTypeAnnotation();}function NumericLiteral(){return t.numberTypeAnnotation();}function BooleanLiteral(){return t.booleanTypeAnnotation();}function NullLiteral(){return t.nullLiteralTypeAnnotation();}function RegExpLiteral(){return t.genericTypeAnnotation(t.identifier(\"RegExp\"));}function ObjectExpression(){return t.genericTypeAnnotation(t.identifier(\"Object\"));}function ArrayExpression(){return t.genericTypeAnnotation(t.identifier(\"Array\"));}function RestElement(){return ArrayExpression();}RestElement.validParent=true;function Func(){return t.genericTypeAnnotation(t.identifier(\"Function\"));}exports.FunctionExpression=Func;exports.ArrowFunctionExpression=Func;exports.FunctionDeclaration=Func;exports.ClassExpression=Func;exports.ClassDeclaration=Func;function CallExpression(){return resolveCall(this.get(\"callee\"));}function TaggedTemplateExpression(){return resolveCall(this.get(\"tag\"));}function resolveCall(callee){callee=callee.resolve();if(callee.isFunction()){if(callee.is(\"async\")){if(callee.is(\"generator\")){return t.genericTypeAnnotation(t.identifier(\"AsyncIterator\"));}else{return t.genericTypeAnnotation(t.identifier(\"Promise\"));}}else{if(callee.node.returnType){return callee.node.returnType;}else{}}}}},{\"./inferer-reference\":32,\"babel-types\":56}],34:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.is=undefined;var _typeof2=require(\"babel-runtime/helpers/typeof\");var _typeof3=_interopRequireDefault(_typeof2);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.matchesPattern=matchesPattern;exports.has=has;exports.isStatic=isStatic;exports.isnt=isnt;exports.equals=equals;exports.isNodeType=isNodeType;exports.canHaveVariableDeclarationOrExpression=canHaveVariableDeclarationOrExpression;exports.canSwapBetweenExpressionAndStatement=canSwapBetweenExpressionAndStatement;exports.isCompletionRecord=isCompletionRecord;exports.isStatementOrBlock=isStatementOrBlock;exports.referencesImport=referencesImport;exports.getSource=getSource;exports.willIMaybeExecuteBefore=willIMaybeExecuteBefore;exports._guessExecutionStatusRelativeTo=_guessExecutionStatusRelativeTo;exports._guessExecutionStatusRelativeToDifferentFunctions=_guessExecutionStatusRelativeToDifferentFunctions;exports.resolve=resolve;exports._resolve=_resolve;var _includes=require(\"lodash/includes\");var _includes2=_interopRequireDefault(_includes);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function matchesPattern(pattern,allowPartial){if(!this.isMemberExpression())return false;var parts=pattern.split(\".\");var search=[this.node];var i=0;function matches(name){var part=parts[i];return part===\"*\"||name===part;}while(search.length){var node=search.shift();if(allowPartial&&i===parts.length){return true;}if(t.isIdentifier(node)){if(!matches(node.name))return false;}else if(t.isLiteral(node)){if(!matches(node.value))return false;}else if(t.isMemberExpression(node)){if(node.computed&&!t.isLiteral(node.property)){return false;}else{search.unshift(node.property);search.unshift(node.object);continue;}}else if(t.isThisExpression(node)){if(!matches(\"this\"))return false;}else{return false;}if(++i>parts.length){return false;}}return i===parts.length;}function has(key){var val=this.node&&this.node[key];if(val&&Array.isArray(val)){return!!val.length;}else{return!!val;}}function isStatic(){return this.scope.isStatic(this.node);}var is=exports.is=has;function isnt(key){return!this.has(key);}function equals(key,value){return this.node[key]===value;}function isNodeType(type){return t.isType(this.type,type);}function canHaveVariableDeclarationOrExpression(){return(this.key===\"init\"||this.key===\"left\")&&this.parentPath.isFor();}function canSwapBetweenExpressionAndStatement(replacement){if(this.key!==\"body\"||!this.parentPath.isArrowFunctionExpression()){return false;}if(this.isExpression()){return t.isBlockStatement(replacement);}else if(this.isBlockStatement()){return t.isExpression(replacement);}return false;}function isCompletionRecord(allowInsideFunction){var path=this;var first=true;do{var container=path.container;if(path.isFunction()&&!first){return!!allowInsideFunction;}first=false;if(Array.isArray(container)&&path.key!==container.length-1){return false;}}while((path=path.parentPath)&&!path.isProgram());return true;}function isStatementOrBlock(){if(this.parentPath.isLabeledStatement()||t.isBlockStatement(this.container)){return false;}else{return(0,_includes2.default)(t.STATEMENT_OR_BLOCK_KEYS,this.key);}}function referencesImport(moduleSource,importName){if(!this.isReferencedIdentifier())return false;var binding=this.scope.getBinding(this.node.name);if(!binding||binding.kind!==\"module\")return false;var path=binding.path;var parent=path.parentPath;if(!parent.isImportDeclaration())return false;if(parent.node.source.value===moduleSource){if(!importName)return true;}else{return false;}if(path.isImportDefaultSpecifier()&&importName===\"default\"){return true;}if(path.isImportNamespaceSpecifier()&&importName===\"*\"){return true;}if(path.isImportSpecifier()&&path.node.imported.name===importName){return true;}return false;}function getSource(){var node=this.node;if(node.end){return this.hub.file.code.slice(node.start,node.end);}else{return\"\";}}function willIMaybeExecuteBefore(target){return this._guessExecutionStatusRelativeTo(target)!==\"after\";}function _guessExecutionStatusRelativeTo(target){var targetFuncParent=target.scope.getFunctionParent();var selfFuncParent=this.scope.getFunctionParent();if(targetFuncParent.node!==selfFuncParent.node){var status=this._guessExecutionStatusRelativeToDifferentFunctions(targetFuncParent);if(status){return status;}else{target=targetFuncParent.path;}}var targetPaths=target.getAncestry();if(targetPaths.indexOf(this)>=0)return\"after\";var selfPaths=this.getAncestry();var commonPath=void 0;var targetIndex=void 0;var selfIndex=void 0;for(selfIndex=0;selfIndex<selfPaths.length;selfIndex++){var selfPath=selfPaths[selfIndex];targetIndex=targetPaths.indexOf(selfPath);if(targetIndex>=0){commonPath=selfPath;break;}}if(!commonPath){return\"before\";}var targetRelationship=targetPaths[targetIndex-1];var selfRelationship=selfPaths[selfIndex-1];if(!targetRelationship||!selfRelationship){return\"before\";}if(targetRelationship.listKey&&targetRelationship.container===selfRelationship.container){return targetRelationship.key>selfRelationship.key?\"before\":\"after\";}var targetKeyPosition=t.VISITOR_KEYS[targetRelationship.type].indexOf(targetRelationship.key);var selfKeyPosition=t.VISITOR_KEYS[selfRelationship.type].indexOf(selfRelationship.key);return targetKeyPosition>selfKeyPosition?\"before\":\"after\";}function _guessExecutionStatusRelativeToDifferentFunctions(targetFuncParent){var targetFuncPath=targetFuncParent.path;if(!targetFuncPath.isFunctionDeclaration())return;var binding=targetFuncPath.scope.getBinding(targetFuncPath.node.id.name);if(!binding.references)return\"before\";var referencePaths=binding.referencePaths;for(var _iterator=referencePaths,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var path=_ref;if(path.key!==\"callee\"||!path.parentPath.isCallExpression()){return;}}var allStatus=void 0;for(var _iterator2=referencePaths,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var _path=_ref2;var childOfFunction=!!_path.find(function(path){return path.node===targetFuncPath.node;});if(childOfFunction)continue;var status=this._guessExecutionStatusRelativeTo(_path);if(allStatus){if(allStatus!==status)return;}else{allStatus=status;}}return allStatus;}function resolve(dangerous,resolved){return this._resolve(dangerous,resolved)||this;}function _resolve(dangerous,resolved){var _this=this;if(resolved&&resolved.indexOf(this)>=0)return;resolved=resolved||[];resolved.push(this);if(this.isVariableDeclarator()){if(this.get(\"id\").isIdentifier()){return this.get(\"init\").resolve(dangerous,resolved);}else{}}else if(this.isReferencedIdentifier()){var binding=this.scope.getBinding(this.node.name);if(!binding)return;if(!binding.constant)return;if(binding.kind===\"module\")return;if(binding.path!==this){var _ret=function(){var ret=binding.path.resolve(dangerous,resolved);if(_this.find(function(parent){return parent.node===ret.node;}))return{v:void 0};return{v:ret};}();if((typeof _ret===\"undefined\"?\"undefined\":(0,_typeof3.default)(_ret))===\"object\")return _ret.v;}}else if(this.isTypeCastExpression()){return this.get(\"expression\").resolve(dangerous,resolved);}else if(dangerous&&this.isMemberExpression()){var targetKey=this.toComputedKey();if(!t.isLiteral(targetKey))return;var targetName=targetKey.value;var target=this.get(\"object\").resolve(dangerous,resolved);if(target.isObjectExpression()){var props=target.get(\"properties\");for(var _iterator3=props,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator3.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var prop=_ref3;if(!prop.isProperty())continue;var key=prop.get(\"key\");var match=prop.isnt(\"computed\")&&key.isIdentifier({name:targetName});match=match||key.isLiteral({value:targetName});if(match)return prop.get(\"value\").resolve(dangerous,resolved);}}else if(target.isArrayExpression()&&!isNaN(+targetName)){var elems=target.get(\"elements\");var elem=elems[targetName];if(elem)return elem.resolve(dangerous,resolved);}}}},{\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/helpers/typeof\":73,\"babel-types\":56,\"lodash/includes\":550}],35:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);var _classCallCheck2=require(\"babel-runtime/helpers/classCallCheck\");var _classCallCheck3=_interopRequireDefault(_classCallCheck2);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var referenceVisitor={ReferencedIdentifier:function ReferencedIdentifier(path,state){if(path.isJSXIdentifier()&&_babelTypes.react.isCompatTag(path.node.name)&&!path.parentPath.isJSXMemberExpression()){return;}if(path.node.name===\"this\"){var scope=path.scope;do{if(scope.path.isFunction()&&!scope.path.isArrowFunctionExpression())break;}while(scope=scope.parent);if(scope)state.breakOnScopePaths.push(scope.path);}var binding=path.scope.getBinding(path.node.name);if(!binding)return;if(binding!==state.scope.getBinding(path.node.name))return;state.bindings[path.node.name]=binding;}};var PathHoister=function(){function PathHoister(path,scope){(0,_classCallCheck3.default)(this,PathHoister);this.breakOnScopePaths=[];this.bindings={};this.scopes=[];this.scope=scope;this.path=path;this.attachAfter=false;}PathHoister.prototype.isCompatibleScope=function isCompatibleScope(scope){for(var key in this.bindings){var binding=this.bindings[key];if(!scope.bindingIdentifierEquals(key,binding.identifier)){return false;}}return true;};PathHoister.prototype.getCompatibleScopes=function getCompatibleScopes(){var scope=this.path.scope;do{if(this.isCompatibleScope(scope)){this.scopes.push(scope);}else{break;}if(this.breakOnScopePaths.indexOf(scope.path)>=0){break;}}while(scope=scope.parent);};PathHoister.prototype.getAttachmentPath=function getAttachmentPath(){var path=this._getAttachmentPath();if(!path)return;var targetScope=path.scope;if(targetScope.path===path){targetScope=path.scope.parent;}if(targetScope.path.isProgram()||targetScope.path.isFunction()){for(var name in this.bindings){if(!targetScope.hasOwnBinding(name))continue;var binding=this.bindings[name];if(binding.kind===\"param\")continue;if(this.getAttachmentParentForPath(binding.path).key>path.key){this.attachAfter=true;path=binding.path;for(var _iterator=binding.constantViolations,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var violationPath=_ref;if(this.getAttachmentParentForPath(violationPath).key>path.key){path=violationPath;}}}}}return path;};PathHoister.prototype._getAttachmentPath=function _getAttachmentPath(){var scopes=this.scopes;var scope=scopes.pop();if(!scope)return;if(scope.path.isFunction()){if(this.hasOwnParamBindings(scope)){if(this.scope===scope)return;return scope.path.get(\"body\").get(\"body\")[0];}else{return this.getNextScopeAttachmentParent();}}else if(scope.path.isProgram()){return this.getNextScopeAttachmentParent();}};PathHoister.prototype.getNextScopeAttachmentParent=function getNextScopeAttachmentParent(){var scope=this.scopes.pop();if(scope)return this.getAttachmentParentForPath(scope.path);};PathHoister.prototype.getAttachmentParentForPath=function getAttachmentParentForPath(path){do{if(!path.parentPath||Array.isArray(path.container)&&path.isStatement()||path.isVariableDeclarator()&&path.parentPath.node!==null&&path.parentPath.node.declarations.length>1)return path;}while(path=path.parentPath);};PathHoister.prototype.hasOwnParamBindings=function hasOwnParamBindings(scope){for(var name in this.bindings){if(!scope.hasOwnBinding(name))continue;var binding=this.bindings[name];if(binding.kind===\"param\"&&binding.constant)return true;}return false;};PathHoister.prototype.run=function run(){var node=this.path.node;if(node._hoisted)return;node._hoisted=true;this.path.traverse(referenceVisitor,this);this.getCompatibleScopes();var attachTo=this.getAttachmentPath();if(!attachTo)return;if(attachTo.getFunctionParent()===this.path.getFunctionParent())return;var uid=attachTo.scope.generateUidIdentifier(\"ref\");var declarator=t.variableDeclarator(uid,this.path.node);var insertFn=this.attachAfter?\"insertAfter\":\"insertBefore\";attachTo[insertFn]([attachTo.isVariableDeclarator()?declarator:t.variableDeclaration(\"var\",[declarator])]);var parent=this.path.parentPath;if(parent.isJSXElement()&&this.path.container===parent.node.children){uid=t.JSXExpressionContainer(uid);}this.path.replaceWith(uid);};return PathHoister;}();exports.default=PathHoister;module.exports=exports[\"default\"];},{\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/helpers/classCallCheck\":72,\"babel-types\":56}],36:[function(require,module,exports){\"use strict\";exports.__esModule=true;var hooks=exports.hooks=[function(self,parent){var removeParent=self.key===\"test\"&&(parent.isWhile()||parent.isSwitchCase())||self.key===\"declaration\"&&parent.isExportDeclaration()||self.key===\"body\"&&parent.isLabeledStatement()||self.listKey===\"declarations\"&&parent.isVariableDeclaration()&&parent.node.declarations.length===1||self.key===\"expression\"&&parent.isExpressionStatement();if(removeParent){parent.remove();return true;}},function(self,parent){if(parent.isSequenceExpression()&&parent.node.expressions.length===1){parent.replaceWith(parent.node.expressions[0]);return true;}},function(self,parent){if(parent.isBinary()){if(self.key===\"left\"){parent.replaceWith(parent.node.right);}else{parent.replaceWith(parent.node.left);}return true;}},function(self,parent){if(parent.isIfStatement()&&(self.key===\"consequent\"||self.key===\"alternate\")||self.key===\"body\"&&(parent.isLoop()||parent.isArrowFunctionExpression())){self.replaceWith({type:\"BlockStatement\",body:[]});return true;}}];},{}],37:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.Flow=exports.Pure=exports.Generated=exports.User=exports.Var=exports.BlockScoped=exports.Referenced=exports.Scope=exports.Expression=exports.Statement=exports.BindingIdentifier=exports.ReferencedMemberExpression=exports.ReferencedIdentifier=undefined;var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}var ReferencedIdentifier=exports.ReferencedIdentifier={types:[\"Identifier\",\"JSXIdentifier\"],checkPath:function checkPath(_ref,opts){var node=_ref.node,parent=_ref.parent;if(!t.isIdentifier(node,opts)&&!t.isJSXMemberExpression(parent,opts)){if(t.isJSXIdentifier(node,opts)){if(_babelTypes.react.isCompatTag(node.name))return false;}else{return false;}}return t.isReferenced(node,parent);}};var ReferencedMemberExpression=exports.ReferencedMemberExpression={types:[\"MemberExpression\"],checkPath:function checkPath(_ref2){var node=_ref2.node,parent=_ref2.parent;return t.isMemberExpression(node)&&t.isReferenced(node,parent);}};var BindingIdentifier=exports.BindingIdentifier={types:[\"Identifier\"],checkPath:function checkPath(_ref3){var node=_ref3.node,parent=_ref3.parent;return t.isIdentifier(node)&&t.isBinding(node,parent);}};var Statement=exports.Statement={types:[\"Statement\"],checkPath:function checkPath(_ref4){var node=_ref4.node,parent=_ref4.parent;if(t.isStatement(node)){if(t.isVariableDeclaration(node)){if(t.isForXStatement(parent,{left:node}))return false;if(t.isForStatement(parent,{init:node}))return false;}return true;}else{return false;}}};var Expression=exports.Expression={types:[\"Expression\"],checkPath:function checkPath(path){if(path.isIdentifier()){return path.isReferencedIdentifier();}else{return t.isExpression(path.node);}}};var Scope=exports.Scope={types:[\"Scopable\"],checkPath:function checkPath(path){return t.isScope(path.node,path.parent);}};var Referenced=exports.Referenced={checkPath:function checkPath(path){return t.isReferenced(path.node,path.parent);}};var BlockScoped=exports.BlockScoped={checkPath:function checkPath(path){return t.isBlockScoped(path.node);}};var Var=exports.Var={types:[\"VariableDeclaration\"],checkPath:function checkPath(path){return t.isVar(path.node);}};var User=exports.User={checkPath:function checkPath(path){return path.node&&!!path.node.loc;}};var Generated=exports.Generated={checkPath:function checkPath(path){return!path.isUser();}};var Pure=exports.Pure={checkPath:function checkPath(path,opts){return path.scope.isPure(path.node,opts);}};var Flow=exports.Flow={types:[\"Flow\",\"ImportDeclaration\",\"ExportDeclaration\",\"ImportSpecifier\"],checkPath:function checkPath(_ref5){var node=_ref5.node;if(t.isFlow(node)){return true;}else if(t.isImportDeclaration(node)){return node.importKind===\"type\"||node.importKind===\"typeof\";}else if(t.isExportDeclaration(node)){return node.exportKind===\"type\";}else if(t.isImportSpecifier(node)){return node.importKind===\"type\"||node.importKind===\"typeof\";}else{return false;}}};},{\"babel-types\":56}],38:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _typeof2=require(\"babel-runtime/helpers/typeof\");var _typeof3=_interopRequireDefault(_typeof2);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.insertBefore=insertBefore;exports._containerInsert=_containerInsert;exports._containerInsertBefore=_containerInsertBefore;exports._containerInsertAfter=_containerInsertAfter;exports._maybePopFromStatements=_maybePopFromStatements;exports.insertAfter=insertAfter;exports.updateSiblingKeys=updateSiblingKeys;exports._verifyNodeList=_verifyNodeList;exports.unshiftContainer=unshiftContainer;exports.pushContainer=pushContainer;exports.hoist=hoist;var _cache=require(\"../cache\");var _hoister=require(\"./lib/hoister\");var _hoister2=_interopRequireDefault(_hoister);var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function insertBefore(nodes){this._assertUnremoved();nodes=this._verifyNodeList(nodes);if(this.parentPath.isExpressionStatement()||this.parentPath.isLabeledStatement()){return this.parentPath.insertBefore(nodes);}else if(this.isNodeType(\"Expression\")||this.parentPath.isForStatement()&&this.key===\"init\"){if(this.node)nodes.push(this.node);this.replaceExpressionWithStatements(nodes);}else{this._maybePopFromStatements(nodes);if(Array.isArray(this.container)){return this._containerInsertBefore(nodes);}else if(this.isStatementOrBlock()){if(this.node)nodes.push(this.node);this._replaceWith(t.blockStatement(nodes));}else{throw new Error(\"We don't know what to do with this node type. \"+\"We were previously a Statement but we can't fit in here?\");}}return[this];}function _containerInsert(from,nodes){this.updateSiblingKeys(from,nodes.length);var paths=[];for(var i=0;i<nodes.length;i++){var to=from+i;var node=nodes[i];this.container.splice(to,0,node);if(this.context){var path=this.context.create(this.parent,this.container,to,this.listKey);if(this.context.queue)path.pushContext(this.context);paths.push(path);}else{paths.push(_index2.default.get({parentPath:this.parentPath,parent:this.parent,container:this.container,listKey:this.listKey,key:to}));}}var contexts=this._getQueueContexts();for(var _iterator=paths,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var _path=_ref;_path.setScope();_path.debug(function(){return\"Inserted.\";});for(var _iterator2=contexts,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var context=_ref2;context.maybeQueue(_path,true);}}return paths;}function _containerInsertBefore(nodes){return this._containerInsert(this.key,nodes);}function _containerInsertAfter(nodes){return this._containerInsert(this.key+1,nodes);}function _maybePopFromStatements(nodes){var last=nodes[nodes.length-1];var isIdentifier=t.isIdentifier(last)||t.isExpressionStatement(last)&&t.isIdentifier(last.expression);if(isIdentifier&&!this.isCompletionRecord()){nodes.pop();}}function insertAfter(nodes){this._assertUnremoved();nodes=this._verifyNodeList(nodes);if(this.parentPath.isExpressionStatement()||this.parentPath.isLabeledStatement()){return this.parentPath.insertAfter(nodes);}else if(this.isNodeType(\"Expression\")||this.parentPath.isForStatement()&&this.key===\"init\"){if(this.node){var temp=this.scope.generateDeclaredUidIdentifier();nodes.unshift(t.expressionStatement(t.assignmentExpression(\"=\",temp,this.node)));nodes.push(t.expressionStatement(temp));}this.replaceExpressionWithStatements(nodes);}else{this._maybePopFromStatements(nodes);if(Array.isArray(this.container)){return this._containerInsertAfter(nodes);}else if(this.isStatementOrBlock()){if(this.node)nodes.unshift(this.node);this._replaceWith(t.blockStatement(nodes));}else{throw new Error(\"We don't know what to do with this node type. \"+\"We were previously a Statement but we can't fit in here?\");}}return[this];}function updateSiblingKeys(fromIndex,incrementBy){if(!this.parent)return;var paths=_cache.path.get(this.parent);for(var i=0;i<paths.length;i++){var path=paths[i];if(path.key>=fromIndex){path.key+=incrementBy;}}}function _verifyNodeList(nodes){if(!nodes){return[];}if(nodes.constructor!==Array){nodes=[nodes];}for(var i=0;i<nodes.length;i++){var node=nodes[i];var msg=void 0;if(!node){msg=\"has falsy node\";}else if((typeof node===\"undefined\"?\"undefined\":(0,_typeof3.default)(node))!==\"object\"){msg=\"contains a non-object node\";}else if(!node.type){msg=\"without a type\";}else if(node instanceof _index2.default){msg=\"has a NodePath when it expected a raw object\";}if(msg){var type=Array.isArray(node)?\"array\":typeof node===\"undefined\"?\"undefined\":(0,_typeof3.default)(node);throw new Error(\"Node list \"+msg+\" with the index of \"+i+\" and type of \"+type);}}return nodes;}function unshiftContainer(listKey,nodes){this._assertUnremoved();nodes=this._verifyNodeList(nodes);var path=_index2.default.get({parentPath:this,parent:this.node,container:this.node[listKey],listKey:listKey,key:0});return path.insertBefore(nodes);}function pushContainer(listKey,nodes){this._assertUnremoved();nodes=this._verifyNodeList(nodes);var container=this.node[listKey];var path=_index2.default.get({parentPath:this,parent:this.node,container:container,listKey:listKey,key:container.length});return path.replaceWithMultiple(nodes);}function hoist(){var scope=arguments.length>0&&arguments[0]!==undefined?arguments[0]:this.scope;var hoister=new _hoister2.default(this,scope);return hoister.run();}},{\"../cache\":20,\"./index\":30,\"./lib/hoister\":35,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/helpers/typeof\":73,\"babel-types\":56}],39:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.remove=remove;exports._callRemovalHooks=_callRemovalHooks;exports._remove=_remove;exports._markRemoved=_markRemoved;exports._assertUnremoved=_assertUnremoved;var _removalHooks=require(\"./lib/removal-hooks\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function remove(){this._assertUnremoved();this.resync();if(this._callRemovalHooks()){this._markRemoved();return;}this.shareCommentsWithSiblings();this._remove();this._markRemoved();}function _callRemovalHooks(){for(var _iterator=_removalHooks.hooks,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var fn=_ref;if(fn(this,this.parentPath))return true;}}function _remove(){if(Array.isArray(this.container)){this.container.splice(this.key,1);this.updateSiblingKeys(this.key,-1);}else{this._replaceWith(null);}}function _markRemoved(){this.shouldSkip=true;this.removed=true;this.node=null;}function _assertUnremoved(){if(this.removed){throw this.buildCodeFrameError(\"NodePath has been removed so is read-only.\");}}},{\"./lib/removal-hooks\":36,\"babel-runtime/core-js/get-iterator\":61}],40:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.replaceWithMultiple=replaceWithMultiple;exports.replaceWithSourceString=replaceWithSourceString;exports.replaceWith=replaceWith;exports._replaceWith=_replaceWith;exports.replaceExpressionWithStatements=replaceExpressionWithStatements;exports.replaceInline=replaceInline;var _babelCodeFrame=require(\"babel-code-frame\");var _babelCodeFrame2=_interopRequireDefault(_babelCodeFrame);var _index=require(\"../index\");var _index2=_interopRequireDefault(_index);var _index3=require(\"./index\");var _index4=_interopRequireDefault(_index3);var _babylon=require(\"babylon\");var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var hoistVariablesVisitor={Function:function Function(path){path.skip();},VariableDeclaration:function VariableDeclaration(path){if(path.node.kind!==\"var\")return;var bindings=path.getBindingIdentifiers();for(var key in bindings){path.scope.push({id:bindings[key]});}var exprs=[];for(var _iterator=path.node.declarations,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var declar=_ref;if(declar.init){exprs.push(t.expressionStatement(t.assignmentExpression(\"=\",declar.id,declar.init)));}}path.replaceWithMultiple(exprs);}};function replaceWithMultiple(nodes){this.resync();nodes=this._verifyNodeList(nodes);t.inheritLeadingComments(nodes[0],this.node);t.inheritTrailingComments(nodes[nodes.length-1],this.node);this.node=this.container[this.key]=null;this.insertAfter(nodes);if(this.node){this.requeue();}else{this.remove();}}function replaceWithSourceString(replacement){this.resync();try{replacement=\"(\"+replacement+\")\";replacement=(0,_babylon.parse)(replacement);}catch(err){var loc=err.loc;if(loc){err.message+=\" - make sure this is an expression.\";err.message+=\"\\n\"+(0,_babelCodeFrame2.default)(replacement,loc.line,loc.column+1);}throw err;}replacement=replacement.program.body[0].expression;_index2.default.removeProperties(replacement);return this.replaceWith(replacement);}function replaceWith(replacement){this.resync();if(this.removed){throw new Error(\"You can't replace this node, we've already removed it\");}if(replacement instanceof _index4.default){replacement=replacement.node;}if(!replacement){throw new Error(\"You passed `path.replaceWith()` a falsy node, use `path.remove()` instead\");}if(this.node===replacement){return;}if(this.isProgram()&&!t.isProgram(replacement)){throw new Error(\"You can only replace a Program root node with another Program node\");}if(Array.isArray(replacement)){throw new Error(\"Don't use `path.replaceWith()` with an array of nodes, use `path.replaceWithMultiple()`\");}if(typeof replacement===\"string\"){throw new Error(\"Don't use `path.replaceWith()` with a source string, use `path.replaceWithSourceString()`\");}if(this.isNodeType(\"Statement\")&&t.isExpression(replacement)){if(!this.canHaveVariableDeclarationOrExpression()&&!this.canSwapBetweenExpressionAndStatement(replacement)){replacement=t.expressionStatement(replacement);}}if(this.isNodeType(\"Expression\")&&t.isStatement(replacement)){if(!this.canHaveVariableDeclarationOrExpression()&&!this.canSwapBetweenExpressionAndStatement(replacement)){return this.replaceExpressionWithStatements([replacement]);}}var oldNode=this.node;if(oldNode){t.inheritsComments(replacement,oldNode);t.removeComments(oldNode);}this._replaceWith(replacement);this.type=replacement.type;this.setScope();this.requeue();}function _replaceWith(node){if(!this.container){throw new ReferenceError(\"Container is falsy\");}if(this.inList){t.validate(this.parent,this.key,[node]);}else{t.validate(this.parent,this.key,node);}this.debug(function(){return\"Replace with \"+(node&&node.type);});this.node=this.container[this.key]=node;}function replaceExpressionWithStatements(nodes){this.resync();var toSequenceExpression=t.toSequenceExpression(nodes,this.scope);if(t.isSequenceExpression(toSequenceExpression)){var exprs=toSequenceExpression.expressions;if(exprs.length>=2&&this.parentPath.isExpressionStatement()){this._maybePopFromStatements(exprs);}if(exprs.length===1){this.replaceWith(exprs[0]);}else{this.replaceWith(toSequenceExpression);}}else if(toSequenceExpression){this.replaceWith(toSequenceExpression);}else{var container=t.functionExpression(null,[],t.blockStatement(nodes));container.shadow=true;this.replaceWith(t.callExpression(container,[]));this.traverse(hoistVariablesVisitor);var completionRecords=this.get(\"callee\").getCompletionRecords();for(var _iterator2=completionRecords,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var path=_ref2;if(!path.isExpressionStatement())continue;var loop=path.findParent(function(path){return path.isLoop();});if(loop){var uid=loop.getData(\"expressionReplacementReturnUid\");if(!uid){var callee=this.get(\"callee\");uid=callee.scope.generateDeclaredUidIdentifier(\"ret\");callee.get(\"body\").pushContainer(\"body\",t.returnStatement(uid));loop.setData(\"expressionReplacementReturnUid\",uid);}else{uid=t.identifier(uid.name);}path.get(\"expression\").replaceWith(t.assignmentExpression(\"=\",uid,path.node.expression));}else{path.replaceWith(t.returnStatement(path.node.expression));}}return this.node;}}function replaceInline(nodes){this.resync();if(Array.isArray(nodes)){if(Array.isArray(this.container)){nodes=this._verifyNodeList(nodes);this._containerInsertAfter(nodes);return this.remove();}else{return this.replaceWithMultiple(nodes);}}else{return this.replaceWith(nodes);}}},{\"../index\":23,\"./index\":30,\"babel-code-frame\":12,\"babel-runtime/core-js/get-iterator\":61,\"babel-types\":56,\"babylon\":74}],41:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _classCallCheck2=require(\"babel-runtime/helpers/classCallCheck\");var _classCallCheck3=_interopRequireDefault(_classCallCheck2);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var Binding=function(){function Binding(_ref){var existing=_ref.existing,identifier=_ref.identifier,scope=_ref.scope,path=_ref.path,kind=_ref.kind;(0,_classCallCheck3.default)(this,Binding);this.identifier=identifier;this.scope=scope;this.path=path;this.kind=kind;this.constantViolations=[];this.constant=true;this.referencePaths=[];this.referenced=false;this.references=0;this.clearValue();if(existing){this.constantViolations=[].concat(existing.path,existing.constantViolations,this.constantViolations);}}Binding.prototype.deoptValue=function deoptValue(){this.clearValue();this.hasDeoptedValue=true;};Binding.prototype.setValue=function setValue(value){if(this.hasDeoptedValue)return;this.hasValue=true;this.value=value;};Binding.prototype.clearValue=function clearValue(){this.hasDeoptedValue=false;this.hasValue=false;this.value=null;};Binding.prototype.reassign=function reassign(path){this.constant=false;if(this.constantViolations.indexOf(path)!==-1){return;}this.constantViolations.push(path);};Binding.prototype.reference=function reference(path){if(this.referencePaths.indexOf(path)!==-1){return;}this.referenced=true;this.references++;this.referencePaths.push(path);};Binding.prototype.dereference=function dereference(){this.references--;this.referenced=!!this.references;};return Binding;}();exports.default=Binding;module.exports=exports[\"default\"];},{\"babel-runtime/helpers/classCallCheck\":72}],42:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _keys=require(\"babel-runtime/core-js/object/keys\");var _keys2=_interopRequireDefault(_keys);var _create=require(\"babel-runtime/core-js/object/create\");var _create2=_interopRequireDefault(_create);var _map=require(\"babel-runtime/core-js/map\");var _map2=_interopRequireDefault(_map);var _classCallCheck2=require(\"babel-runtime/helpers/classCallCheck\");var _classCallCheck3=_interopRequireDefault(_classCallCheck2);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);var _includes=require(\"lodash/includes\");var _includes2=_interopRequireDefault(_includes);var _repeat=require(\"lodash/repeat\");var _repeat2=_interopRequireDefault(_repeat);var _renamer=require(\"./lib/renamer\");var _renamer2=_interopRequireDefault(_renamer);var _index=require(\"../index\");var _index2=_interopRequireDefault(_index);var _defaults=require(\"lodash/defaults\");var _defaults2=_interopRequireDefault(_defaults);var _babelMessages=require(\"babel-messages\");var messages=_interopRequireWildcard(_babelMessages);var _binding2=require(\"./binding\");var _binding3=_interopRequireDefault(_binding2);var _globals=require(\"globals\");var _globals2=_interopRequireDefault(_globals);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);var _cache=require(\"../cache\");function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var _crawlCallsCount=0;function getCache(path,parentScope,self){var scopes=_cache.scope.get(path.node)||[];for(var _iterator=scopes,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var scope=_ref;if(scope.parent===parentScope&&scope.path===path)return scope;}scopes.push(self);if(!_cache.scope.has(path.node)){_cache.scope.set(path.node,scopes);}}function gatherNodeParts(node,parts){if(t.isModuleDeclaration(node)){if(node.source){gatherNodeParts(node.source,parts);}else if(node.specifiers&&node.specifiers.length){for(var _iterator2=node.specifiers,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var specifier=_ref2;gatherNodeParts(specifier,parts);}}else if(node.declaration){gatherNodeParts(node.declaration,parts);}}else if(t.isModuleSpecifier(node)){gatherNodeParts(node.local,parts);}else if(t.isMemberExpression(node)){gatherNodeParts(node.object,parts);gatherNodeParts(node.property,parts);}else if(t.isIdentifier(node)){parts.push(node.name);}else if(t.isLiteral(node)){parts.push(node.value);}else if(t.isCallExpression(node)){gatherNodeParts(node.callee,parts);}else if(t.isObjectExpression(node)||t.isObjectPattern(node)){for(var _iterator3=node.properties,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator3.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var prop=_ref3;gatherNodeParts(prop.key||prop.argument,parts);}}}var collectorVisitor={For:function For(path){for(var _iterator4=t.FOR_INIT_KEYS,_isArray4=Array.isArray(_iterator4),_i4=0,_iterator4=_isArray4?_iterator4:(0,_getIterator3.default)(_iterator4);;){var _ref4;if(_isArray4){if(_i4>=_iterator4.length)break;_ref4=_iterator4[_i4++];}else{_i4=_iterator4.next();if(_i4.done)break;_ref4=_i4.value;}var key=_ref4;var declar=path.get(key);if(declar.isVar())path.scope.getFunctionParent().registerBinding(\"var\",declar);}},Declaration:function Declaration(path){if(path.isBlockScoped())return;if(path.isExportDeclaration()&&path.get(\"declaration\").isDeclaration())return;path.scope.getFunctionParent().registerDeclaration(path);},ReferencedIdentifier:function ReferencedIdentifier(path,state){state.references.push(path);},ForXStatement:function ForXStatement(path,state){var left=path.get(\"left\");if(left.isPattern()||left.isIdentifier()){state.constantViolations.push(left);}},ExportDeclaration:{exit:function exit(path){var node=path.node,scope=path.scope;var declar=node.declaration;if(t.isClassDeclaration(declar)||t.isFunctionDeclaration(declar)){var _id=declar.id;if(!_id)return;var binding=scope.getBinding(_id.name);if(binding)binding.reference(path);}else if(t.isVariableDeclaration(declar)){for(var _iterator5=declar.declarations,_isArray5=Array.isArray(_iterator5),_i5=0,_iterator5=_isArray5?_iterator5:(0,_getIterator3.default)(_iterator5);;){var _ref5;if(_isArray5){if(_i5>=_iterator5.length)break;_ref5=_iterator5[_i5++];}else{_i5=_iterator5.next();if(_i5.done)break;_ref5=_i5.value;}var decl=_ref5;var ids=t.getBindingIdentifiers(decl);for(var name in ids){var _binding=scope.getBinding(name);if(_binding)_binding.reference(path);}}}}},LabeledStatement:function LabeledStatement(path){path.scope.getProgramParent().addGlobal(path.node);path.scope.getBlockParent().registerDeclaration(path);},AssignmentExpression:function AssignmentExpression(path,state){state.assignments.push(path);},UpdateExpression:function UpdateExpression(path,state){state.constantViolations.push(path.get(\"argument\"));},UnaryExpression:function UnaryExpression(path,state){if(path.node.operator===\"delete\"){state.constantViolations.push(path.get(\"argument\"));}},BlockScoped:function BlockScoped(path){var scope=path.scope;if(scope.path===path)scope=scope.parent;scope.getBlockParent().registerDeclaration(path);},ClassDeclaration:function ClassDeclaration(path){var id=path.node.id;if(!id)return;var name=id.name;path.scope.bindings[name]=path.scope.getBinding(name);},Block:function Block(path){var paths=path.get(\"body\");for(var _iterator6=paths,_isArray6=Array.isArray(_iterator6),_i6=0,_iterator6=_isArray6?_iterator6:(0,_getIterator3.default)(_iterator6);;){var _ref6;if(_isArray6){if(_i6>=_iterator6.length)break;_ref6=_iterator6[_i6++];}else{_i6=_iterator6.next();if(_i6.done)break;_ref6=_i6.value;}var bodyPath=_ref6;if(bodyPath.isFunctionDeclaration()){path.scope.getBlockParent().registerDeclaration(bodyPath);}}}};var uid=0;var Scope=function(){function Scope(path,parentScope){(0,_classCallCheck3.default)(this,Scope);if(parentScope&&parentScope.block===path.node){return parentScope;}var cached=getCache(path,parentScope,this);if(cached)return cached;this.uid=uid++;this.parent=parentScope;this.hub=path.hub;this.parentBlock=path.parent;this.block=path.node;this.path=path;this.labels=new _map2.default();}Scope.prototype.traverse=function traverse(node,opts,state){(0,_index2.default)(node,opts,this,state,this.path);};Scope.prototype.generateDeclaredUidIdentifier=function generateDeclaredUidIdentifier(){var name=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"temp\";var id=this.generateUidIdentifier(name);this.push({id:id});return id;};Scope.prototype.generateUidIdentifier=function generateUidIdentifier(){var name=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"temp\";return t.identifier(this.generateUid(name));};Scope.prototype.generateUid=function generateUid(){var name=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"temp\";name=t.toIdentifier(name).replace(/^_+/,\"\").replace(/[0-9]+$/g,\"\");var uid=void 0;var i=0;do{uid=this._generateUid(name,i);i++;}while(this.hasLabel(uid)||this.hasBinding(uid)||this.hasGlobal(uid)||this.hasReference(uid));var program=this.getProgramParent();program.references[uid]=true;program.uids[uid]=true;return uid;};Scope.prototype._generateUid=function _generateUid(name,i){var id=name;if(i>1)id+=i;return\"_\"+id;};Scope.prototype.generateUidIdentifierBasedOnNode=function generateUidIdentifierBasedOnNode(parent,defaultName){var node=parent;if(t.isAssignmentExpression(parent)){node=parent.left;}else if(t.isVariableDeclarator(parent)){node=parent.id;}else if(t.isObjectProperty(node)||t.isObjectMethod(node)){node=node.key;}var parts=[];gatherNodeParts(node,parts);var id=parts.join(\"$\");id=id.replace(/^_/,\"\")||defaultName||\"ref\";return this.generateUidIdentifier(id.slice(0,20));};Scope.prototype.isStatic=function isStatic(node){if(t.isThisExpression(node)||t.isSuper(node)){return true;}if(t.isIdentifier(node)){var binding=this.getBinding(node.name);if(binding){return binding.constant;}else{return this.hasBinding(node.name);}}return false;};Scope.prototype.maybeGenerateMemoised=function maybeGenerateMemoised(node,dontPush){if(this.isStatic(node)){return null;}else{var _id2=this.generateUidIdentifierBasedOnNode(node);if(!dontPush)this.push({id:_id2});return _id2;}};Scope.prototype.checkBlockScopedCollisions=function checkBlockScopedCollisions(local,kind,name,id){if(kind===\"param\")return;if(kind===\"hoisted\"&&local.kind===\"let\")return;var duplicate=kind===\"let\"||local.kind===\"let\"||local.kind===\"const\"||local.kind===\"module\"||local.kind===\"param\"&&(kind===\"let\"||kind===\"const\");if(duplicate){throw this.hub.file.buildCodeFrameError(id,messages.get(\"scopeDuplicateDeclaration\",name),TypeError);}};Scope.prototype.rename=function rename(oldName,newName,block){var binding=this.getBinding(oldName);if(binding){newName=newName||this.generateUidIdentifier(oldName).name;return new _renamer2.default(binding,oldName,newName).rename(block);}};Scope.prototype._renameFromMap=function _renameFromMap(map,oldName,newName,value){if(map[oldName]){map[newName]=value;map[oldName]=null;}};Scope.prototype.dump=function dump(){var sep=(0,_repeat2.default)(\"-\",60);console.log(sep);var scope=this;do{console.log(\"#\",scope.block.type);for(var name in scope.bindings){var binding=scope.bindings[name];console.log(\" -\",name,{constant:binding.constant,references:binding.references,violations:binding.constantViolations.length,kind:binding.kind});}}while(scope=scope.parent);console.log(sep);};Scope.prototype.toArray=function toArray(node,i){var file=this.hub.file;if(t.isIdentifier(node)){var binding=this.getBinding(node.name);if(binding&&binding.constant&&binding.path.isGenericType(\"Array\"))return node;}if(t.isArrayExpression(node)){return node;}if(t.isIdentifier(node,{name:\"arguments\"})){return t.callExpression(t.memberExpression(t.memberExpression(t.memberExpression(t.identifier(\"Array\"),t.identifier(\"prototype\")),t.identifier(\"slice\")),t.identifier(\"call\")),[node]);}var helperName=\"toArray\";var args=[node];if(i===true){helperName=\"toConsumableArray\";}else if(i){args.push(t.numericLiteral(i));helperName=\"slicedToArray\";}return t.callExpression(file.addHelper(helperName),args);};Scope.prototype.hasLabel=function hasLabel(name){return!!this.getLabel(name);};Scope.prototype.getLabel=function getLabel(name){return this.labels.get(name);};Scope.prototype.registerLabel=function registerLabel(path){this.labels.set(path.node.label.name,path);};Scope.prototype.registerDeclaration=function registerDeclaration(path){if(path.isLabeledStatement()){this.registerLabel(path);}else if(path.isFunctionDeclaration()){this.registerBinding(\"hoisted\",path.get(\"id\"),path);}else if(path.isVariableDeclaration()){var declarations=path.get(\"declarations\");for(var _iterator7=declarations,_isArray7=Array.isArray(_iterator7),_i7=0,_iterator7=_isArray7?_iterator7:(0,_getIterator3.default)(_iterator7);;){var _ref7;if(_isArray7){if(_i7>=_iterator7.length)break;_ref7=_iterator7[_i7++];}else{_i7=_iterator7.next();if(_i7.done)break;_ref7=_i7.value;}var declar=_ref7;this.registerBinding(path.node.kind,declar);}}else if(path.isClassDeclaration()){this.registerBinding(\"let\",path);}else if(path.isImportDeclaration()){var specifiers=path.get(\"specifiers\");for(var _iterator8=specifiers,_isArray8=Array.isArray(_iterator8),_i8=0,_iterator8=_isArray8?_iterator8:(0,_getIterator3.default)(_iterator8);;){var _ref8;if(_isArray8){if(_i8>=_iterator8.length)break;_ref8=_iterator8[_i8++];}else{_i8=_iterator8.next();if(_i8.done)break;_ref8=_i8.value;}var specifier=_ref8;this.registerBinding(\"module\",specifier);}}else if(path.isExportDeclaration()){var _declar=path.get(\"declaration\");if(_declar.isClassDeclaration()||_declar.isFunctionDeclaration()||_declar.isVariableDeclaration()){this.registerDeclaration(_declar);}}else{this.registerBinding(\"unknown\",path);}};Scope.prototype.buildUndefinedNode=function buildUndefinedNode(){if(this.hasBinding(\"undefined\")){return t.unaryExpression(\"void\",t.numericLiteral(0),true);}else{return t.identifier(\"undefined\");}};Scope.prototype.registerConstantViolation=function registerConstantViolation(path){var ids=path.getBindingIdentifiers();for(var name in ids){var binding=this.getBinding(name);if(binding)binding.reassign(path);}};Scope.prototype.registerBinding=function registerBinding(kind,path){var bindingPath=arguments.length>2&&arguments[2]!==undefined?arguments[2]:path;if(!kind)throw new ReferenceError(\"no `kind`\");if(path.isVariableDeclaration()){var declarators=path.get(\"declarations\");for(var _iterator9=declarators,_isArray9=Array.isArray(_iterator9),_i9=0,_iterator9=_isArray9?_iterator9:(0,_getIterator3.default)(_iterator9);;){var _ref9;if(_isArray9){if(_i9>=_iterator9.length)break;_ref9=_iterator9[_i9++];}else{_i9=_iterator9.next();if(_i9.done)break;_ref9=_i9.value;}var declar=_ref9;this.registerBinding(kind,declar);}return;}var parent=this.getProgramParent();var ids=path.getBindingIdentifiers(true);for(var name in ids){for(var _iterator10=ids[name],_isArray10=Array.isArray(_iterator10),_i10=0,_iterator10=_isArray10?_iterator10:(0,_getIterator3.default)(_iterator10);;){var _ref10;if(_isArray10){if(_i10>=_iterator10.length)break;_ref10=_iterator10[_i10++];}else{_i10=_iterator10.next();if(_i10.done)break;_ref10=_i10.value;}var _id3=_ref10;var local=this.getOwnBinding(name);if(local){if(local.identifier===_id3)continue;this.checkBlockScopedCollisions(local,kind,name,_id3);}if(local&&local.path.isFlow())local=null;parent.references[name]=true;this.bindings[name]=new _binding3.default({identifier:_id3,existing:local,scope:this,path:bindingPath,kind:kind});}}};Scope.prototype.addGlobal=function addGlobal(node){this.globals[node.name]=node;};Scope.prototype.hasUid=function hasUid(name){var scope=this;do{if(scope.uids[name])return true;}while(scope=scope.parent);return false;};Scope.prototype.hasGlobal=function hasGlobal(name){var scope=this;do{if(scope.globals[name])return true;}while(scope=scope.parent);return false;};Scope.prototype.hasReference=function hasReference(name){var scope=this;do{if(scope.references[name])return true;}while(scope=scope.parent);return false;};Scope.prototype.isPure=function isPure(node,constantsOnly){if(t.isIdentifier(node)){var binding=this.getBinding(node.name);if(!binding)return false;if(constantsOnly)return binding.constant;return true;}else if(t.isClass(node)){if(node.superClass&&!this.isPure(node.superClass,constantsOnly))return false;return this.isPure(node.body,constantsOnly);}else if(t.isClassBody(node)){for(var _iterator11=node.body,_isArray11=Array.isArray(_iterator11),_i11=0,_iterator11=_isArray11?_iterator11:(0,_getIterator3.default)(_iterator11);;){var _ref11;if(_isArray11){if(_i11>=_iterator11.length)break;_ref11=_iterator11[_i11++];}else{_i11=_iterator11.next();if(_i11.done)break;_ref11=_i11.value;}var method=_ref11;if(!this.isPure(method,constantsOnly))return false;}return true;}else if(t.isBinary(node)){return this.isPure(node.left,constantsOnly)&&this.isPure(node.right,constantsOnly);}else if(t.isArrayExpression(node)){for(var _iterator12=node.elements,_isArray12=Array.isArray(_iterator12),_i12=0,_iterator12=_isArray12?_iterator12:(0,_getIterator3.default)(_iterator12);;){var _ref12;if(_isArray12){if(_i12>=_iterator12.length)break;_ref12=_iterator12[_i12++];}else{_i12=_iterator12.next();if(_i12.done)break;_ref12=_i12.value;}var elem=_ref12;if(!this.isPure(elem,constantsOnly))return false;}return true;}else if(t.isObjectExpression(node)){for(var _iterator13=node.properties,_isArray13=Array.isArray(_iterator13),_i13=0,_iterator13=_isArray13?_iterator13:(0,_getIterator3.default)(_iterator13);;){var _ref13;if(_isArray13){if(_i13>=_iterator13.length)break;_ref13=_iterator13[_i13++];}else{_i13=_iterator13.next();if(_i13.done)break;_ref13=_i13.value;}var prop=_ref13;if(!this.isPure(prop,constantsOnly))return false;}return true;}else if(t.isClassMethod(node)){if(node.computed&&!this.isPure(node.key,constantsOnly))return false;if(node.kind===\"get\"||node.kind===\"set\")return false;return true;}else if(t.isClassProperty(node)||t.isObjectProperty(node)){if(node.computed&&!this.isPure(node.key,constantsOnly))return false;return this.isPure(node.value,constantsOnly);}else if(t.isUnaryExpression(node)){return this.isPure(node.argument,constantsOnly);}else{return t.isPureish(node);}};Scope.prototype.setData=function setData(key,val){return this.data[key]=val;};Scope.prototype.getData=function getData(key){var scope=this;do{var data=scope.data[key];if(data!=null)return data;}while(scope=scope.parent);};Scope.prototype.removeData=function removeData(key){var scope=this;do{var data=scope.data[key];if(data!=null)scope.data[key]=null;}while(scope=scope.parent);};Scope.prototype.init=function init(){if(!this.references)this.crawl();};Scope.prototype.crawl=function crawl(){_crawlCallsCount++;this._crawl();_crawlCallsCount--;};Scope.prototype._crawl=function _crawl(){var path=this.path;this.references=(0,_create2.default)(null);this.bindings=(0,_create2.default)(null);this.globals=(0,_create2.default)(null);this.uids=(0,_create2.default)(null);this.data=(0,_create2.default)(null);if(path.isLoop()){for(var _iterator14=t.FOR_INIT_KEYS,_isArray14=Array.isArray(_iterator14),_i14=0,_iterator14=_isArray14?_iterator14:(0,_getIterator3.default)(_iterator14);;){var _ref14;if(_isArray14){if(_i14>=_iterator14.length)break;_ref14=_iterator14[_i14++];}else{_i14=_iterator14.next();if(_i14.done)break;_ref14=_i14.value;}var key=_ref14;var node=path.get(key);if(node.isBlockScoped())this.registerBinding(node.node.kind,node);}}if(path.isFunctionExpression()&&path.has(\"id\")){if(!path.get(\"id\").node[t.NOT_LOCAL_BINDING]){this.registerBinding(\"local\",path.get(\"id\"),path);}}if(path.isClassExpression()&&path.has(\"id\")){if(!path.get(\"id\").node[t.NOT_LOCAL_BINDING]){this.registerBinding(\"local\",path);}}if(path.isFunction()){var params=path.get(\"params\");for(var _iterator15=params,_isArray15=Array.isArray(_iterator15),_i15=0,_iterator15=_isArray15?_iterator15:(0,_getIterator3.default)(_iterator15);;){var _ref15;if(_isArray15){if(_i15>=_iterator15.length)break;_ref15=_iterator15[_i15++];}else{_i15=_iterator15.next();if(_i15.done)break;_ref15=_i15.value;}var param=_ref15;this.registerBinding(\"param\",param);}}if(path.isCatchClause()){this.registerBinding(\"let\",path);}var parent=this.getProgramParent();if(parent.crawling)return;var state={references:[],constantViolations:[],assignments:[]};this.crawling=true;path.traverse(collectorVisitor,state);this.crawling=false;for(var _iterator16=state.assignments,_isArray16=Array.isArray(_iterator16),_i16=0,_iterator16=_isArray16?_iterator16:(0,_getIterator3.default)(_iterator16);;){var _ref16;if(_isArray16){if(_i16>=_iterator16.length)break;_ref16=_iterator16[_i16++];}else{_i16=_iterator16.next();if(_i16.done)break;_ref16=_i16.value;}var _path=_ref16;var ids=_path.getBindingIdentifiers();var programParent=void 0;for(var name in ids){if(_path.scope.getBinding(name))continue;programParent=programParent||_path.scope.getProgramParent();programParent.addGlobal(ids[name]);}_path.scope.registerConstantViolation(_path);}for(var _iterator17=state.references,_isArray17=Array.isArray(_iterator17),_i17=0,_iterator17=_isArray17?_iterator17:(0,_getIterator3.default)(_iterator17);;){var _ref17;if(_isArray17){if(_i17>=_iterator17.length)break;_ref17=_iterator17[_i17++];}else{_i17=_iterator17.next();if(_i17.done)break;_ref17=_i17.value;}var ref=_ref17;var binding=ref.scope.getBinding(ref.node.name);if(binding){binding.reference(ref);}else{ref.scope.getProgramParent().addGlobal(ref.node);}}for(var _iterator18=state.constantViolations,_isArray18=Array.isArray(_iterator18),_i18=0,_iterator18=_isArray18?_iterator18:(0,_getIterator3.default)(_iterator18);;){var _ref18;if(_isArray18){if(_i18>=_iterator18.length)break;_ref18=_iterator18[_i18++];}else{_i18=_iterator18.next();if(_i18.done)break;_ref18=_i18.value;}var _path2=_ref18;_path2.scope.registerConstantViolation(_path2);}};Scope.prototype.push=function push(opts){var path=this.path;if(!path.isBlockStatement()&&!path.isProgram()){path=this.getBlockParent().path;}if(path.isSwitchStatement()){path=this.getFunctionParent().path;}if(path.isLoop()||path.isCatchClause()||path.isFunction()){t.ensureBlock(path.node);path=path.get(\"body\");}var unique=opts.unique;var kind=opts.kind||\"var\";var blockHoist=opts._blockHoist==null?2:opts._blockHoist;var dataKey=\"declaration:\"+kind+\":\"+blockHoist;var declarPath=!unique&&path.getData(dataKey);if(!declarPath){var declar=t.variableDeclaration(kind,[]);declar._generated=true;declar._blockHoist=blockHoist;var _path$unshiftContaine=path.unshiftContainer(\"body\",[declar]);declarPath=_path$unshiftContaine[0];if(!unique)path.setData(dataKey,declarPath);}var declarator=t.variableDeclarator(opts.id,opts.init);declarPath.node.declarations.push(declarator);this.registerBinding(kind,declarPath.get(\"declarations\").pop());};Scope.prototype.getProgramParent=function getProgramParent(){var scope=this;do{if(scope.path.isProgram()){return scope;}}while(scope=scope.parent);throw new Error(\"We couldn't find a Function or Program...\");};Scope.prototype.getFunctionParent=function getFunctionParent(){var scope=this;do{if(scope.path.isFunctionParent()){return scope;}}while(scope=scope.parent);throw new Error(\"We couldn't find a Function or Program...\");};Scope.prototype.getBlockParent=function getBlockParent(){var scope=this;do{if(scope.path.isBlockParent()){return scope;}}while(scope=scope.parent);throw new Error(\"We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...\");};Scope.prototype.getAllBindings=function getAllBindings(){var ids=(0,_create2.default)(null);var scope=this;do{(0,_defaults2.default)(ids,scope.bindings);scope=scope.parent;}while(scope);return ids;};Scope.prototype.getAllBindingsOfKind=function getAllBindingsOfKind(){var ids=(0,_create2.default)(null);for(var _iterator19=arguments,_isArray19=Array.isArray(_iterator19),_i19=0,_iterator19=_isArray19?_iterator19:(0,_getIterator3.default)(_iterator19);;){var _ref19;if(_isArray19){if(_i19>=_iterator19.length)break;_ref19=_iterator19[_i19++];}else{_i19=_iterator19.next();if(_i19.done)break;_ref19=_i19.value;}var kind=_ref19;var scope=this;do{for(var name in scope.bindings){var binding=scope.bindings[name];if(binding.kind===kind)ids[name]=binding;}scope=scope.parent;}while(scope);}return ids;};Scope.prototype.bindingIdentifierEquals=function bindingIdentifierEquals(name,node){return this.getBindingIdentifier(name)===node;};Scope.prototype.warnOnFlowBinding=function warnOnFlowBinding(binding){if(_crawlCallsCount===0&&binding&&binding.path.isFlow()){console.warn(\"\\n        You or one of the Babel plugins you are using are using Flow declarations as bindings.\\n        Support for this will be removed in version 6.8. To find out the caller, grep for this\\n        message and change it to a `console.trace()`.\\n      \");}return binding;};Scope.prototype.getBinding=function getBinding(name){var scope=this;do{var binding=scope.getOwnBinding(name);if(binding)return this.warnOnFlowBinding(binding);}while(scope=scope.parent);};Scope.prototype.getOwnBinding=function getOwnBinding(name){return this.warnOnFlowBinding(this.bindings[name]);};Scope.prototype.getBindingIdentifier=function getBindingIdentifier(name){var info=this.getBinding(name);return info&&info.identifier;};Scope.prototype.getOwnBindingIdentifier=function getOwnBindingIdentifier(name){var binding=this.bindings[name];return binding&&binding.identifier;};Scope.prototype.hasOwnBinding=function hasOwnBinding(name){return!!this.getOwnBinding(name);};Scope.prototype.hasBinding=function hasBinding(name,noGlobals){if(!name)return false;if(this.hasOwnBinding(name))return true;if(this.parentHasBinding(name,noGlobals))return true;if(this.hasUid(name))return true;if(!noGlobals&&(0,_includes2.default)(Scope.globals,name))return true;if(!noGlobals&&(0,_includes2.default)(Scope.contextVariables,name))return true;return false;};Scope.prototype.parentHasBinding=function parentHasBinding(name,noGlobals){return this.parent&&this.parent.hasBinding(name,noGlobals);};Scope.prototype.moveBindingTo=function moveBindingTo(name,scope){var info=this.getBinding(name);if(info){info.scope.removeOwnBinding(name);info.scope=scope;scope.bindings[name]=info;}};Scope.prototype.removeOwnBinding=function removeOwnBinding(name){delete this.bindings[name];};Scope.prototype.removeBinding=function removeBinding(name){var info=this.getBinding(name);if(info){info.scope.removeOwnBinding(name);}var scope=this;do{if(scope.uids[name]){scope.uids[name]=false;}}while(scope=scope.parent);};return Scope;}();Scope.globals=(0,_keys2.default)(_globals2.default.builtin);Scope.contextVariables=[\"arguments\",\"undefined\",\"Infinity\",\"NaN\"];exports.default=Scope;module.exports=exports[\"default\"];},{\"../cache\":20,\"../index\":23,\"./binding\":41,\"./lib/renamer\":43,\"babel-messages\":60,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/core-js/map\":63,\"babel-runtime/core-js/object/create\":65,\"babel-runtime/core-js/object/keys\":67,\"babel-runtime/helpers/classCallCheck\":72,\"babel-types\":56,\"globals\":374,\"lodash/defaults\":547,\"lodash/includes\":550,\"lodash/repeat\":568}],43:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _classCallCheck2=require(\"babel-runtime/helpers/classCallCheck\");var _classCallCheck3=_interopRequireDefault(_classCallCheck2);var _binding=require(\"../binding\");var _binding2=_interopRequireDefault(_binding);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var renameVisitor={ReferencedIdentifier:function ReferencedIdentifier(_ref,state){var node=_ref.node;if(node.name===state.oldName){node.name=state.newName;}},Scope:function Scope(path,state){if(!path.scope.bindingIdentifierEquals(state.oldName,state.binding.identifier)){path.skip();}},\"AssignmentExpression|Declaration\":function AssignmentExpressionDeclaration(path,state){var ids=path.getOuterBindingIdentifiers();for(var name in ids){if(name===state.oldName)ids[name].name=state.newName;}}};var Renamer=function(){function Renamer(binding,oldName,newName){(0,_classCallCheck3.default)(this,Renamer);this.newName=newName;this.oldName=oldName;this.binding=binding;}Renamer.prototype.maybeConvertFromExportDeclaration=function maybeConvertFromExportDeclaration(parentDeclar){var exportDeclar=parentDeclar.parentPath.isExportDeclaration()&&parentDeclar.parentPath;if(!exportDeclar)return;var isDefault=exportDeclar.isExportDefaultDeclaration();if(isDefault&&(parentDeclar.isFunctionDeclaration()||parentDeclar.isClassDeclaration())&&!parentDeclar.node.id){parentDeclar.node.id=parentDeclar.scope.generateUidIdentifier(\"default\");}var bindingIdentifiers=parentDeclar.getOuterBindingIdentifiers();var specifiers=[];for(var name in bindingIdentifiers){var localName=name===this.oldName?this.newName:name;var exportedName=isDefault?\"default\":name;specifiers.push(t.exportSpecifier(t.identifier(localName),t.identifier(exportedName)));}if(specifiers.length){var aliasDeclar=t.exportNamedDeclaration(null,specifiers);if(parentDeclar.isFunctionDeclaration()){aliasDeclar._blockHoist=3;}exportDeclar.insertAfter(aliasDeclar);exportDeclar.replaceWith(parentDeclar.node);}};Renamer.prototype.maybeConvertFromClassFunctionDeclaration=function maybeConvertFromClassFunctionDeclaration(path){return;if(!path.isFunctionDeclaration()&&!path.isClassDeclaration())return;if(this.binding.kind!==\"hoisted\")return;path.node.id=t.identifier(this.oldName);path.node._blockHoist=3;path.replaceWith(t.variableDeclaration(\"let\",[t.variableDeclarator(t.identifier(this.newName),t.toExpression(path.node))]));};Renamer.prototype.maybeConvertFromClassFunctionExpression=function maybeConvertFromClassFunctionExpression(path){return;if(!path.isFunctionExpression()&&!path.isClassExpression())return;if(this.binding.kind!==\"local\")return;path.node.id=t.identifier(this.oldName);this.binding.scope.parent.push({id:t.identifier(this.newName)});path.replaceWith(t.assignmentExpression(\"=\",t.identifier(this.newName),path.node));};Renamer.prototype.rename=function rename(block){var binding=this.binding,oldName=this.oldName,newName=this.newName;var scope=binding.scope,path=binding.path;var parentDeclar=path.find(function(path){return path.isDeclaration()||path.isFunctionExpression();});if(parentDeclar){this.maybeConvertFromExportDeclaration(parentDeclar);}scope.traverse(block||scope.block,renameVisitor,this);if(!block){scope.removeOwnBinding(oldName);scope.bindings[newName]=binding;this.binding.identifier.name=newName;}if(binding.type===\"hoisted\"){}if(parentDeclar){this.maybeConvertFromClassFunctionDeclaration(parentDeclar);this.maybeConvertFromClassFunctionExpression(parentDeclar);}};return Renamer;}();exports.default=Renamer;module.exports=exports[\"default\"];},{\"../binding\":41,\"babel-runtime/helpers/classCallCheck\":72,\"babel-types\":56}],44:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _typeof2=require(\"babel-runtime/helpers/typeof\");var _typeof3=_interopRequireDefault(_typeof2);var _keys=require(\"babel-runtime/core-js/object/keys\");var _keys2=_interopRequireDefault(_keys);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.explode=explode;exports.verify=verify;exports.merge=merge;var _virtualTypes=require(\"./path/lib/virtual-types\");var virtualTypes=_interopRequireWildcard(_virtualTypes);var _babelMessages=require(\"babel-messages\");var messages=_interopRequireWildcard(_babelMessages);var _babelTypes=require(\"babel-types\");var t=_interopRequireWildcard(_babelTypes);var _clone=require(\"lodash/clone\");var _clone2=_interopRequireDefault(_clone);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function explode(visitor){if(visitor._exploded)return visitor;visitor._exploded=true;for(var nodeType in visitor){if(shouldIgnoreKey(nodeType))continue;var parts=nodeType.split(\"|\");if(parts.length===1)continue;var fns=visitor[nodeType];delete visitor[nodeType];for(var _iterator=parts,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var part=_ref;visitor[part]=fns;}}verify(visitor);delete visitor.__esModule;ensureEntranceObjects(visitor);ensureCallbackArrays(visitor);for(var _iterator2=(0,_keys2.default)(visitor),_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var _nodeType3=_ref2;if(shouldIgnoreKey(_nodeType3))continue;var wrapper=virtualTypes[_nodeType3];if(!wrapper)continue;var _fns2=visitor[_nodeType3];for(var type in _fns2){_fns2[type]=wrapCheck(wrapper,_fns2[type]);}delete visitor[_nodeType3];if(wrapper.types){for(var _iterator4=wrapper.types,_isArray4=Array.isArray(_iterator4),_i4=0,_iterator4=_isArray4?_iterator4:(0,_getIterator3.default)(_iterator4);;){var _ref4;if(_isArray4){if(_i4>=_iterator4.length)break;_ref4=_iterator4[_i4++];}else{_i4=_iterator4.next();if(_i4.done)break;_ref4=_i4.value;}var _type=_ref4;if(visitor[_type]){mergePair(visitor[_type],_fns2);}else{visitor[_type]=_fns2;}}}else{mergePair(visitor,_fns2);}}for(var _nodeType in visitor){if(shouldIgnoreKey(_nodeType))continue;var _fns=visitor[_nodeType];var aliases=t.FLIPPED_ALIAS_KEYS[_nodeType];var deprecratedKey=t.DEPRECATED_KEYS[_nodeType];if(deprecratedKey){console.trace(\"Visitor defined for \"+_nodeType+\" but it has been renamed to \"+deprecratedKey);aliases=[deprecratedKey];}if(!aliases)continue;delete visitor[_nodeType];for(var _iterator3=aliases,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator3.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var alias=_ref3;var existing=visitor[alias];if(existing){mergePair(existing,_fns);}else{visitor[alias]=(0,_clone2.default)(_fns);}}}for(var _nodeType2 in visitor){if(shouldIgnoreKey(_nodeType2))continue;ensureCallbackArrays(visitor[_nodeType2]);}return visitor;}function verify(visitor){if(visitor._verified)return;if(typeof visitor===\"function\"){throw new Error(messages.get(\"traverseVerifyRootFunction\"));}for(var nodeType in visitor){if(nodeType===\"enter\"||nodeType===\"exit\"){validateVisitorMethods(nodeType,visitor[nodeType]);}if(shouldIgnoreKey(nodeType))continue;if(t.TYPES.indexOf(nodeType)<0){throw new Error(messages.get(\"traverseVerifyNodeType\",nodeType));}var visitors=visitor[nodeType];if((typeof visitors===\"undefined\"?\"undefined\":(0,_typeof3.default)(visitors))===\"object\"){for(var visitorKey in visitors){if(visitorKey===\"enter\"||visitorKey===\"exit\"){validateVisitorMethods(nodeType+\".\"+visitorKey,visitors[visitorKey]);}else{throw new Error(messages.get(\"traverseVerifyVisitorProperty\",nodeType,visitorKey));}}}}visitor._verified=true;}function validateVisitorMethods(path,val){var fns=[].concat(val);for(var _iterator5=fns,_isArray5=Array.isArray(_iterator5),_i5=0,_iterator5=_isArray5?_iterator5:(0,_getIterator3.default)(_iterator5);;){var _ref5;if(_isArray5){if(_i5>=_iterator5.length)break;_ref5=_iterator5[_i5++];}else{_i5=_iterator5.next();if(_i5.done)break;_ref5=_i5.value;}var fn=_ref5;if(typeof fn!==\"function\"){throw new TypeError(\"Non-function found defined in \"+path+\" with type \"+(typeof fn===\"undefined\"?\"undefined\":(0,_typeof3.default)(fn)));}}}function merge(visitors){var states=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];var wrapper=arguments[2];var rootVisitor={};for(var i=0;i<visitors.length;i++){var visitor=visitors[i];var state=states[i];explode(visitor);for(var type in visitor){var visitorType=visitor[type];if(state||wrapper){visitorType=wrapWithStateOrWrapper(visitorType,state,wrapper);}var nodeVisitor=rootVisitor[type]=rootVisitor[type]||{};mergePair(nodeVisitor,visitorType);}}return rootVisitor;}function wrapWithStateOrWrapper(oldVisitor,state,wrapper){var newVisitor={};var _loop=function _loop(key){var fns=oldVisitor[key];if(!Array.isArray(fns))return\"continue\";fns=fns.map(function(fn){var newFn=fn;if(state){newFn=function newFn(path){return fn.call(state,path,state);};}if(wrapper){newFn=wrapper(state.key,key,newFn);}return newFn;});newVisitor[key]=fns;};for(var key in oldVisitor){var _ret=_loop(key);if(_ret===\"continue\")continue;}return newVisitor;}function ensureEntranceObjects(obj){for(var key in obj){if(shouldIgnoreKey(key))continue;var fns=obj[key];if(typeof fns===\"function\"){obj[key]={enter:fns};}}}function ensureCallbackArrays(obj){if(obj.enter&&!Array.isArray(obj.enter))obj.enter=[obj.enter];if(obj.exit&&!Array.isArray(obj.exit))obj.exit=[obj.exit];}function wrapCheck(wrapper,fn){var newFn=function newFn(path){if(wrapper.checkPath(path)){return fn.apply(this,arguments);}};newFn.toString=function(){return fn.toString();};return newFn;}function shouldIgnoreKey(key){if(key[0]===\"_\")return true;if(key===\"enter\"||key===\"exit\"||key===\"shouldSkip\")return true;if(key===\"blacklist\"||key===\"noScope\"||key===\"skipKeys\")return true;return false;}function mergePair(dest,src){for(var key in src){dest[key]=[].concat(dest[key]||[],src[key]);}}},{\"./path/lib/virtual-types\":37,\"babel-messages\":60,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/core-js/object/keys\":67,\"babel-runtime/helpers/typeof\":73,\"babel-types\":56,\"lodash/clone\":545}],45:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.NOT_LOCAL_BINDING=exports.BLOCK_SCOPED_SYMBOL=exports.INHERIT_KEYS=exports.UNARY_OPERATORS=exports.STRING_UNARY_OPERATORS=exports.NUMBER_UNARY_OPERATORS=exports.BOOLEAN_UNARY_OPERATORS=exports.BINARY_OPERATORS=exports.NUMBER_BINARY_OPERATORS=exports.BOOLEAN_BINARY_OPERATORS=exports.COMPARISON_BINARY_OPERATORS=exports.EQUALITY_BINARY_OPERATORS=exports.BOOLEAN_NUMBER_BINARY_OPERATORS=exports.UPDATE_OPERATORS=exports.LOGICAL_OPERATORS=exports.COMMENT_KEYS=exports.FOR_INIT_KEYS=exports.FLATTENABLE_KEYS=exports.STATEMENT_OR_BLOCK_KEYS=undefined;var _for=require(\"babel-runtime/core-js/symbol/for\");var _for2=_interopRequireDefault(_for);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var STATEMENT_OR_BLOCK_KEYS=exports.STATEMENT_OR_BLOCK_KEYS=[\"consequent\",\"body\",\"alternate\"];var FLATTENABLE_KEYS=exports.FLATTENABLE_KEYS=[\"body\",\"expressions\"];var FOR_INIT_KEYS=exports.FOR_INIT_KEYS=[\"left\",\"init\"];var COMMENT_KEYS=exports.COMMENT_KEYS=[\"leadingComments\",\"trailingComments\",\"innerComments\"];var LOGICAL_OPERATORS=exports.LOGICAL_OPERATORS=[\"||\",\"&&\"];var UPDATE_OPERATORS=exports.UPDATE_OPERATORS=[\"++\",\"--\"];var BOOLEAN_NUMBER_BINARY_OPERATORS=exports.BOOLEAN_NUMBER_BINARY_OPERATORS=[\">\",\"<\",\">=\",\"<=\"];var EQUALITY_BINARY_OPERATORS=exports.EQUALITY_BINARY_OPERATORS=[\"==\",\"===\",\"!=\",\"!==\"];var COMPARISON_BINARY_OPERATORS=exports.COMPARISON_BINARY_OPERATORS=[].concat(EQUALITY_BINARY_OPERATORS,[\"in\",\"instanceof\"]);var BOOLEAN_BINARY_OPERATORS=exports.BOOLEAN_BINARY_OPERATORS=[].concat(COMPARISON_BINARY_OPERATORS,BOOLEAN_NUMBER_BINARY_OPERATORS);var NUMBER_BINARY_OPERATORS=exports.NUMBER_BINARY_OPERATORS=[\"-\",\"/\",\"%\",\"*\",\"**\",\"&\",\"|\",\">>\",\">>>\",\"<<\",\"^\"];var BINARY_OPERATORS=exports.BINARY_OPERATORS=[\"+\"].concat(NUMBER_BINARY_OPERATORS,BOOLEAN_BINARY_OPERATORS);var BOOLEAN_UNARY_OPERATORS=exports.BOOLEAN_UNARY_OPERATORS=[\"delete\",\"!\"];var NUMBER_UNARY_OPERATORS=exports.NUMBER_UNARY_OPERATORS=[\"+\",\"-\",\"++\",\"--\",\"~\"];var STRING_UNARY_OPERATORS=exports.STRING_UNARY_OPERATORS=[\"typeof\"];var UNARY_OPERATORS=exports.UNARY_OPERATORS=[\"void\"].concat(BOOLEAN_UNARY_OPERATORS,NUMBER_UNARY_OPERATORS,STRING_UNARY_OPERATORS);var INHERIT_KEYS=exports.INHERIT_KEYS={optional:[\"typeAnnotation\",\"typeParameters\",\"returnType\"],force:[\"start\",\"loc\",\"end\"]};var BLOCK_SCOPED_SYMBOL=exports.BLOCK_SCOPED_SYMBOL=(0,_for2.default)(\"var used to be block scoped\");var NOT_LOCAL_BINDING=exports.NOT_LOCAL_BINDING=(0,_for2.default)(\"should not be considered a local binding\");},{\"babel-runtime/core-js/symbol/for\":69}],46:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _maxSafeInteger=require(\"babel-runtime/core-js/number/max-safe-integer\");var _maxSafeInteger2=_interopRequireDefault(_maxSafeInteger);var _stringify=require(\"babel-runtime/core-js/json/stringify\");var _stringify2=_interopRequireDefault(_stringify);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.toComputedKey=toComputedKey;exports.toSequenceExpression=toSequenceExpression;exports.toKeyAlias=toKeyAlias;exports.toIdentifier=toIdentifier;exports.toBindingIdentifierName=toBindingIdentifierName;exports.toStatement=toStatement;exports.toExpression=toExpression;exports.toBlock=toBlock;exports.valueToNode=valueToNode;var _isPlainObject=require(\"lodash/isPlainObject\");var _isPlainObject2=_interopRequireDefault(_isPlainObject);var _isRegExp=require(\"lodash/isRegExp\");var _isRegExp2=_interopRequireDefault(_isRegExp);var _index=require(\"./index\");var t=_interopRequireWildcard(_index);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function toComputedKey(node){var key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:node.key||node.property;if(!node.computed){if(t.isIdentifier(key))key=t.stringLiteral(key.name);}return key;}function toSequenceExpression(nodes,scope){if(!nodes||!nodes.length)return;var declars=[];var bailed=false;var result=convert(nodes);if(bailed)return;for(var i=0;i<declars.length;i++){scope.push(declars[i]);}return result;function convert(nodes){var ensureLastUndefined=false;var exprs=[];for(var _iterator=nodes,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var node=_ref;if(t.isExpression(node)){exprs.push(node);}else if(t.isExpressionStatement(node)){exprs.push(node.expression);}else if(t.isVariableDeclaration(node)){if(node.kind!==\"var\")return bailed=true;for(var _iterator2=node.declarations,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var declar=_ref2;var bindings=t.getBindingIdentifiers(declar);for(var key in bindings){declars.push({kind:node.kind,id:bindings[key]});}if(declar.init){exprs.push(t.assignmentExpression(\"=\",declar.id,declar.init));}}ensureLastUndefined=true;continue;}else if(t.isIfStatement(node)){var consequent=node.consequent?convert([node.consequent]):scope.buildUndefinedNode();var alternate=node.alternate?convert([node.alternate]):scope.buildUndefinedNode();if(!consequent||!alternate)return bailed=true;exprs.push(t.conditionalExpression(node.test,consequent,alternate));}else if(t.isBlockStatement(node)){exprs.push(convert(node.body));}else if(t.isEmptyStatement(node)){ensureLastUndefined=true;continue;}else{return bailed=true;}ensureLastUndefined=false;}if(ensureLastUndefined||exprs.length===0){exprs.push(scope.buildUndefinedNode());}if(exprs.length===1){return exprs[0];}else{return t.sequenceExpression(exprs);}}}function toKeyAlias(node){var key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:node.key;var alias=void 0;if(node.kind===\"method\"){return toKeyAlias.increment()+\"\";}else if(t.isIdentifier(key)){alias=key.name;}else if(t.isStringLiteral(key)){alias=(0,_stringify2.default)(key.value);}else{alias=(0,_stringify2.default)(t.removePropertiesDeep(t.cloneDeep(key)));}if(node.computed){alias=\"[\"+alias+\"]\";}if(node.static){alias=\"static:\"+alias;}return alias;}toKeyAlias.uid=0;toKeyAlias.increment=function(){if(toKeyAlias.uid>=_maxSafeInteger2.default){return toKeyAlias.uid=0;}else{return toKeyAlias.uid++;}};function toIdentifier(name){name=name+\"\";name=name.replace(/[^a-zA-Z0-9$_]/g,\"-\");name=name.replace(/^[-0-9]+/,\"\");name=name.replace(/[-\\s]+(.)?/g,function(match,c){return c?c.toUpperCase():\"\";});if(!t.isValidIdentifier(name)){name=\"_\"+name;}return name||\"_\";}function toBindingIdentifierName(name){name=toIdentifier(name);if(name===\"eval\"||name===\"arguments\")name=\"_\"+name;return name;}function toStatement(node,ignore){if(t.isStatement(node)){return node;}var mustHaveId=false;var newType=void 0;if(t.isClass(node)){mustHaveId=true;newType=\"ClassDeclaration\";}else if(t.isFunction(node)){mustHaveId=true;newType=\"FunctionDeclaration\";}else if(t.isAssignmentExpression(node)){return t.expressionStatement(node);}if(mustHaveId&&!node.id){newType=false;}if(!newType){if(ignore){return false;}else{throw new Error(\"cannot turn \"+node.type+\" to a statement\");}}node.type=newType;return node;}function toExpression(node){if(t.isExpressionStatement(node)){node=node.expression;}if(t.isExpression(node)){return node;}if(t.isClass(node)){node.type=\"ClassExpression\";}else if(t.isFunction(node)){node.type=\"FunctionExpression\";}if(!t.isExpression(node)){throw new Error(\"cannot turn \"+node.type+\" to an expression\");}return node;}function toBlock(node,parent){if(t.isBlockStatement(node)){return node;}if(t.isEmptyStatement(node)){node=[];}if(!Array.isArray(node)){if(!t.isStatement(node)){if(t.isFunction(parent)){node=t.returnStatement(node);}else{node=t.expressionStatement(node);}}node=[node];}return t.blockStatement(node);}function valueToNode(value){if(value===undefined){return t.identifier(\"undefined\");}if(value===true||value===false){return t.booleanLiteral(value);}if(value===null){return t.nullLiteral();}if(typeof value===\"string\"){return t.stringLiteral(value);}if(typeof value===\"number\"){return t.numericLiteral(value);}if((0,_isRegExp2.default)(value)){var pattern=value.source;var flags=value.toString().match(/\\/([a-z]+|)$/)[1];return t.regExpLiteral(pattern,flags);}if(Array.isArray(value)){return t.arrayExpression(value.map(t.valueToNode));}if((0,_isPlainObject2.default)(value)){var props=[];for(var key in value){var nodeKey=void 0;if(t.isValidIdentifier(key)){nodeKey=t.identifier(key);}else{nodeKey=t.stringLiteral(key);}props.push(t.objectProperty(nodeKey,t.valueToNode(value[key])));}return t.objectExpression(props);}throw new Error(\"don't know how to turn this value into a node\");}},{\"./index\":56,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/core-js/json/stringify\":62,\"babel-runtime/core-js/number/max-safe-integer\":64,\"lodash/isPlainObject\":559,\"lodash/isRegExp\":560}],47:[function(require,module,exports){\"use strict\";var _index=require(\"../index\");var t=_interopRequireWildcard(_index);var _constants=require(\"../constants\");var _index2=require(\"./index\");var _index3=_interopRequireDefault(_index2);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _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;}}(0,_index3.default)(\"ArrayExpression\",{fields:{elements:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeOrValueType)(\"null\",\"Expression\",\"SpreadElement\"))),default:[]}},visitor:[\"elements\"],aliases:[\"Expression\"]});(0,_index3.default)(\"AssignmentExpression\",{fields:{operator:{validate:(0,_index2.assertValueType)(\"string\")},left:{validate:(0,_index2.assertNodeType)(\"LVal\")},right:{validate:(0,_index2.assertNodeType)(\"Expression\")}},builder:[\"operator\",\"left\",\"right\"],visitor:[\"left\",\"right\"],aliases:[\"Expression\"]});(0,_index3.default)(\"BinaryExpression\",{builder:[\"operator\",\"left\",\"right\"],fields:{operator:{validate:_index2.assertOneOf.apply(undefined,_constants.BINARY_OPERATORS)},left:{validate:(0,_index2.assertNodeType)(\"Expression\")},right:{validate:(0,_index2.assertNodeType)(\"Expression\")}},visitor:[\"left\",\"right\"],aliases:[\"Binary\",\"Expression\"]});(0,_index3.default)(\"Directive\",{visitor:[\"value\"],fields:{value:{validate:(0,_index2.assertNodeType)(\"DirectiveLiteral\")}}});(0,_index3.default)(\"DirectiveLiteral\",{builder:[\"value\"],fields:{value:{validate:(0,_index2.assertValueType)(\"string\")}}});(0,_index3.default)(\"BlockStatement\",{builder:[\"body\",\"directives\"],visitor:[\"directives\",\"body\"],fields:{directives:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Directive\"))),default:[]},body:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Statement\")))}},aliases:[\"Scopable\",\"BlockParent\",\"Block\",\"Statement\"]});(0,_index3.default)(\"BreakStatement\",{visitor:[\"label\"],fields:{label:{validate:(0,_index2.assertNodeType)(\"Identifier\"),optional:true}},aliases:[\"Statement\",\"Terminatorless\",\"CompletionStatement\"]});(0,_index3.default)(\"CallExpression\",{visitor:[\"callee\",\"arguments\"],fields:{callee:{validate:(0,_index2.assertNodeType)(\"Expression\")},arguments:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Expression\",\"SpreadElement\")))}},aliases:[\"Expression\"]});(0,_index3.default)(\"CatchClause\",{visitor:[\"param\",\"body\"],fields:{param:{validate:(0,_index2.assertNodeType)(\"Identifier\")},body:{validate:(0,_index2.assertNodeType)(\"BlockStatement\")}},aliases:[\"Scopable\"]});(0,_index3.default)(\"ConditionalExpression\",{visitor:[\"test\",\"consequent\",\"alternate\"],fields:{test:{validate:(0,_index2.assertNodeType)(\"Expression\")},consequent:{validate:(0,_index2.assertNodeType)(\"Expression\")},alternate:{validate:(0,_index2.assertNodeType)(\"Expression\")}},aliases:[\"Expression\",\"Conditional\"]});(0,_index3.default)(\"ContinueStatement\",{visitor:[\"label\"],fields:{label:{validate:(0,_index2.assertNodeType)(\"Identifier\"),optional:true}},aliases:[\"Statement\",\"Terminatorless\",\"CompletionStatement\"]});(0,_index3.default)(\"DebuggerStatement\",{aliases:[\"Statement\"]});(0,_index3.default)(\"DoWhileStatement\",{visitor:[\"test\",\"body\"],fields:{test:{validate:(0,_index2.assertNodeType)(\"Expression\")},body:{validate:(0,_index2.assertNodeType)(\"Statement\")}},aliases:[\"Statement\",\"BlockParent\",\"Loop\",\"While\",\"Scopable\"]});(0,_index3.default)(\"EmptyStatement\",{aliases:[\"Statement\"]});(0,_index3.default)(\"ExpressionStatement\",{visitor:[\"expression\"],fields:{expression:{validate:(0,_index2.assertNodeType)(\"Expression\")}},aliases:[\"Statement\",\"ExpressionWrapper\"]});(0,_index3.default)(\"File\",{builder:[\"program\",\"comments\",\"tokens\"],visitor:[\"program\"],fields:{program:{validate:(0,_index2.assertNodeType)(\"Program\")}}});(0,_index3.default)(\"ForInStatement\",{visitor:[\"left\",\"right\",\"body\"],aliases:[\"Scopable\",\"Statement\",\"For\",\"BlockParent\",\"Loop\",\"ForXStatement\"],fields:{left:{validate:(0,_index2.assertNodeType)(\"VariableDeclaration\",\"LVal\")},right:{validate:(0,_index2.assertNodeType)(\"Expression\")},body:{validate:(0,_index2.assertNodeType)(\"Statement\")}}});(0,_index3.default)(\"ForStatement\",{visitor:[\"init\",\"test\",\"update\",\"body\"],aliases:[\"Scopable\",\"Statement\",\"For\",\"BlockParent\",\"Loop\"],fields:{init:{validate:(0,_index2.assertNodeType)(\"VariableDeclaration\",\"Expression\"),optional:true},test:{validate:(0,_index2.assertNodeType)(\"Expression\"),optional:true},update:{validate:(0,_index2.assertNodeType)(\"Expression\"),optional:true},body:{validate:(0,_index2.assertNodeType)(\"Statement\")}}});(0,_index3.default)(\"FunctionDeclaration\",{builder:[\"id\",\"params\",\"body\",\"generator\",\"async\"],visitor:[\"id\",\"params\",\"body\",\"returnType\",\"typeParameters\"],fields:{id:{validate:(0,_index2.assertNodeType)(\"Identifier\")},params:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"LVal\")))},body:{validate:(0,_index2.assertNodeType)(\"BlockStatement\")},generator:{default:false,validate:(0,_index2.assertValueType)(\"boolean\")},async:{default:false,validate:(0,_index2.assertValueType)(\"boolean\")}},aliases:[\"Scopable\",\"Function\",\"BlockParent\",\"FunctionParent\",\"Statement\",\"Pureish\",\"Declaration\"]});(0,_index3.default)(\"FunctionExpression\",{inherits:\"FunctionDeclaration\",aliases:[\"Scopable\",\"Function\",\"BlockParent\",\"FunctionParent\",\"Expression\",\"Pureish\"],fields:{id:{validate:(0,_index2.assertNodeType)(\"Identifier\"),optional:true},params:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"LVal\")))},body:{validate:(0,_index2.assertNodeType)(\"BlockStatement\")},generator:{default:false,validate:(0,_index2.assertValueType)(\"boolean\")},async:{default:false,validate:(0,_index2.assertValueType)(\"boolean\")}}});(0,_index3.default)(\"Identifier\",{builder:[\"name\"],visitor:[\"typeAnnotation\"],aliases:[\"Expression\",\"LVal\"],fields:{name:{validate:function validate(node,key,val){if(!t.isValidIdentifier(val)){}}},decorators:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Decorator\")))}}});(0,_index3.default)(\"IfStatement\",{visitor:[\"test\",\"consequent\",\"alternate\"],aliases:[\"Statement\",\"Conditional\"],fields:{test:{validate:(0,_index2.assertNodeType)(\"Expression\")},consequent:{validate:(0,_index2.assertNodeType)(\"Statement\")},alternate:{optional:true,validate:(0,_index2.assertNodeType)(\"Statement\")}}});(0,_index3.default)(\"LabeledStatement\",{visitor:[\"label\",\"body\"],aliases:[\"Statement\"],fields:{label:{validate:(0,_index2.assertNodeType)(\"Identifier\")},body:{validate:(0,_index2.assertNodeType)(\"Statement\")}}});(0,_index3.default)(\"StringLiteral\",{builder:[\"value\"],fields:{value:{validate:(0,_index2.assertValueType)(\"string\")}},aliases:[\"Expression\",\"Pureish\",\"Literal\",\"Immutable\"]});(0,_index3.default)(\"NumericLiteral\",{builder:[\"value\"],deprecatedAlias:\"NumberLiteral\",fields:{value:{validate:(0,_index2.assertValueType)(\"number\")}},aliases:[\"Expression\",\"Pureish\",\"Literal\",\"Immutable\"]});(0,_index3.default)(\"NullLiteral\",{aliases:[\"Expression\",\"Pureish\",\"Literal\",\"Immutable\"]});(0,_index3.default)(\"BooleanLiteral\",{builder:[\"value\"],fields:{value:{validate:(0,_index2.assertValueType)(\"boolean\")}},aliases:[\"Expression\",\"Pureish\",\"Literal\",\"Immutable\"]});(0,_index3.default)(\"RegExpLiteral\",{builder:[\"pattern\",\"flags\"],deprecatedAlias:\"RegexLiteral\",aliases:[\"Expression\",\"Literal\"],fields:{pattern:{validate:(0,_index2.assertValueType)(\"string\")},flags:{validate:(0,_index2.assertValueType)(\"string\"),default:\"\"}}});(0,_index3.default)(\"LogicalExpression\",{builder:[\"operator\",\"left\",\"right\"],visitor:[\"left\",\"right\"],aliases:[\"Binary\",\"Expression\"],fields:{operator:{validate:_index2.assertOneOf.apply(undefined,_constants.LOGICAL_OPERATORS)},left:{validate:(0,_index2.assertNodeType)(\"Expression\")},right:{validate:(0,_index2.assertNodeType)(\"Expression\")}}});(0,_index3.default)(\"MemberExpression\",{builder:[\"object\",\"property\",\"computed\"],visitor:[\"object\",\"property\"],aliases:[\"Expression\",\"LVal\"],fields:{object:{validate:(0,_index2.assertNodeType)(\"Expression\")},property:{validate:function validate(node,key,val){var expectedType=node.computed?\"Expression\":\"Identifier\";(0,_index2.assertNodeType)(expectedType)(node,key,val);}},computed:{default:false}}});(0,_index3.default)(\"NewExpression\",{visitor:[\"callee\",\"arguments\"],aliases:[\"Expression\"],fields:{callee:{validate:(0,_index2.assertNodeType)(\"Expression\")},arguments:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Expression\",\"SpreadElement\")))}}});(0,_index3.default)(\"Program\",{visitor:[\"directives\",\"body\"],builder:[\"body\",\"directives\"],fields:{directives:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Directive\"))),default:[]},body:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Statement\")))}},aliases:[\"Scopable\",\"BlockParent\",\"Block\",\"FunctionParent\"]});(0,_index3.default)(\"ObjectExpression\",{visitor:[\"properties\"],aliases:[\"Expression\"],fields:{properties:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"ObjectMethod\",\"ObjectProperty\",\"SpreadProperty\")))}}});(0,_index3.default)(\"ObjectMethod\",{builder:[\"kind\",\"key\",\"params\",\"body\",\"computed\"],fields:{kind:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"string\"),(0,_index2.assertOneOf)(\"method\",\"get\",\"set\")),default:\"method\"},computed:{validate:(0,_index2.assertValueType)(\"boolean\"),default:false},key:{validate:function validate(node,key,val){var expectedTypes=node.computed?[\"Expression\"]:[\"Identifier\",\"StringLiteral\",\"NumericLiteral\"];_index2.assertNodeType.apply(undefined,expectedTypes)(node,key,val);}},decorators:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Decorator\")))},body:{validate:(0,_index2.assertNodeType)(\"BlockStatement\")},generator:{default:false,validate:(0,_index2.assertValueType)(\"boolean\")},async:{default:false,validate:(0,_index2.assertValueType)(\"boolean\")}},visitor:[\"key\",\"params\",\"body\",\"decorators\",\"returnType\",\"typeParameters\"],aliases:[\"UserWhitespacable\",\"Function\",\"Scopable\",\"BlockParent\",\"FunctionParent\",\"Method\",\"ObjectMember\"]});(0,_index3.default)(\"ObjectProperty\",{builder:[\"key\",\"value\",\"computed\",\"shorthand\",\"decorators\"],fields:{computed:{validate:(0,_index2.assertValueType)(\"boolean\"),default:false},key:{validate:function validate(node,key,val){var expectedTypes=node.computed?[\"Expression\"]:[\"Identifier\",\"StringLiteral\",\"NumericLiteral\"];_index2.assertNodeType.apply(undefined,expectedTypes)(node,key,val);}},value:{validate:(0,_index2.assertNodeType)(\"Expression\")},shorthand:{validate:(0,_index2.assertValueType)(\"boolean\"),default:false},decorators:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Decorator\"))),optional:true}},visitor:[\"key\",\"value\",\"decorators\"],aliases:[\"UserWhitespacable\",\"Property\",\"ObjectMember\"]});(0,_index3.default)(\"RestElement\",{visitor:[\"argument\",\"typeAnnotation\"],aliases:[\"LVal\"],fields:{argument:{validate:(0,_index2.assertNodeType)(\"LVal\")},decorators:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Decorator\")))}}});(0,_index3.default)(\"ReturnStatement\",{visitor:[\"argument\"],aliases:[\"Statement\",\"Terminatorless\",\"CompletionStatement\"],fields:{argument:{validate:(0,_index2.assertNodeType)(\"Expression\"),optional:true}}});(0,_index3.default)(\"SequenceExpression\",{visitor:[\"expressions\"],fields:{expressions:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Expression\")))}},aliases:[\"Expression\"]});(0,_index3.default)(\"SwitchCase\",{visitor:[\"test\",\"consequent\"],fields:{test:{validate:(0,_index2.assertNodeType)(\"Expression\"),optional:true},consequent:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"Statement\")))}}});(0,_index3.default)(\"SwitchStatement\",{visitor:[\"discriminant\",\"cases\"],aliases:[\"Statement\",\"BlockParent\",\"Scopable\"],fields:{discriminant:{validate:(0,_index2.assertNodeType)(\"Expression\")},cases:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"SwitchCase\")))}}});(0,_index3.default)(\"ThisExpression\",{aliases:[\"Expression\"]});(0,_index3.default)(\"ThrowStatement\",{visitor:[\"argument\"],aliases:[\"Statement\",\"Terminatorless\",\"CompletionStatement\"],fields:{argument:{validate:(0,_index2.assertNodeType)(\"Expression\")}}});(0,_index3.default)(\"TryStatement\",{visitor:[\"block\",\"handler\",\"finalizer\"],aliases:[\"Statement\"],fields:{body:{validate:(0,_index2.assertNodeType)(\"BlockStatement\")},handler:{optional:true,handler:(0,_index2.assertNodeType)(\"BlockStatement\")},finalizer:{optional:true,validate:(0,_index2.assertNodeType)(\"BlockStatement\")}}});(0,_index3.default)(\"UnaryExpression\",{builder:[\"operator\",\"argument\",\"prefix\"],fields:{prefix:{default:true},argument:{validate:(0,_index2.assertNodeType)(\"Expression\")},operator:{validate:_index2.assertOneOf.apply(undefined,_constants.UNARY_OPERATORS)}},visitor:[\"argument\"],aliases:[\"UnaryLike\",\"Expression\"]});(0,_index3.default)(\"UpdateExpression\",{builder:[\"operator\",\"argument\",\"prefix\"],fields:{prefix:{default:false},argument:{validate:(0,_index2.assertNodeType)(\"Expression\")},operator:{validate:_index2.assertOneOf.apply(undefined,_constants.UPDATE_OPERATORS)}},visitor:[\"argument\"],aliases:[\"Expression\"]});(0,_index3.default)(\"VariableDeclaration\",{builder:[\"kind\",\"declarations\"],visitor:[\"declarations\"],aliases:[\"Statement\",\"Declaration\"],fields:{kind:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"string\"),(0,_index2.assertOneOf)(\"var\",\"let\",\"const\"))},declarations:{validate:(0,_index2.chain)((0,_index2.assertValueType)(\"array\"),(0,_index2.assertEach)((0,_index2.assertNodeType)(\"VariableDeclarator\")))}}});(0,_index3.default)(\"VariableDeclarator\",{visitor:[\"id\",\"init\"],fields:{id:{validate:(0,_index2.assertNodeType)(\"LVal\")},init:{optional:true,validate:(0,_index2.assertNodeType)(\"Expression\")}}});(0,_index3.default)(\"WhileStatement\",{visitor:[\"test\",\"body\"],aliases:[\"Statement\",\"BlockParent\",\"Loop\",\"While\",\"Scopable\"],fields:{test:{validate:(0,_index2.assertNodeType)(\"Expression\")},body:{validate:(0,_index2.assertNodeType)(\"BlockStatement\",\"Statement\")}}});(0,_index3.default)(\"WithStatement\",{visitor:[\"object\",\"body\"],aliases:[\"Statement\"],fields:{object:{object:(0,_index2.assertNodeType)(\"Expression\")},body:{validate:(0,_index2.assertNodeType)(\"BlockStatement\",\"Statement\")}}});},{\"../constants\":45,\"../index\":56,\"./index\":51}],48:[function(require,module,exports){\"use strict\";var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}(0,_index2.default)(\"AssignmentPattern\",{visitor:[\"left\",\"right\"],aliases:[\"Pattern\",\"LVal\"],fields:{left:{validate:(0,_index.assertNodeType)(\"Identifier\")},right:{validate:(0,_index.assertNodeType)(\"Expression\")},decorators:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"Decorator\")))}}});(0,_index2.default)(\"ArrayPattern\",{visitor:[\"elements\",\"typeAnnotation\"],aliases:[\"Pattern\",\"LVal\"],fields:{elements:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"Expression\")))},decorators:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"Decorator\")))}}});(0,_index2.default)(\"ArrowFunctionExpression\",{builder:[\"params\",\"body\",\"async\"],visitor:[\"params\",\"body\",\"returnType\",\"typeParameters\"],aliases:[\"Scopable\",\"Function\",\"BlockParent\",\"FunctionParent\",\"Expression\",\"Pureish\"],fields:{params:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"LVal\")))},body:{validate:(0,_index.assertNodeType)(\"BlockStatement\",\"Expression\")},async:{validate:(0,_index.assertValueType)(\"boolean\"),default:false}}});(0,_index2.default)(\"ClassBody\",{visitor:[\"body\"],fields:{body:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"ClassMethod\",\"ClassProperty\")))}}});(0,_index2.default)(\"ClassDeclaration\",{builder:[\"id\",\"superClass\",\"body\",\"decorators\"],visitor:[\"id\",\"body\",\"superClass\",\"mixins\",\"typeParameters\",\"superTypeParameters\",\"implements\",\"decorators\"],aliases:[\"Scopable\",\"Class\",\"Statement\",\"Declaration\",\"Pureish\"],fields:{id:{validate:(0,_index.assertNodeType)(\"Identifier\")},body:{validate:(0,_index.assertNodeType)(\"ClassBody\")},superClass:{optional:true,validate:(0,_index.assertNodeType)(\"Expression\")},decorators:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"Decorator\")))}}});(0,_index2.default)(\"ClassExpression\",{inherits:\"ClassDeclaration\",aliases:[\"Scopable\",\"Class\",\"Expression\",\"Pureish\"],fields:{id:{optional:true,validate:(0,_index.assertNodeType)(\"Identifier\")},body:{validate:(0,_index.assertNodeType)(\"ClassBody\")},superClass:{optional:true,validate:(0,_index.assertNodeType)(\"Expression\")},decorators:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"Decorator\")))}}});(0,_index2.default)(\"ExportAllDeclaration\",{visitor:[\"source\"],aliases:[\"Statement\",\"Declaration\",\"ModuleDeclaration\",\"ExportDeclaration\"],fields:{source:{validate:(0,_index.assertNodeType)(\"StringLiteral\")}}});(0,_index2.default)(\"ExportDefaultDeclaration\",{visitor:[\"declaration\"],aliases:[\"Statement\",\"Declaration\",\"ModuleDeclaration\",\"ExportDeclaration\"],fields:{declaration:{validate:(0,_index.assertNodeType)(\"FunctionDeclaration\",\"ClassDeclaration\",\"Expression\")}}});(0,_index2.default)(\"ExportNamedDeclaration\",{visitor:[\"declaration\",\"specifiers\",\"source\"],aliases:[\"Statement\",\"Declaration\",\"ModuleDeclaration\",\"ExportDeclaration\"],fields:{declaration:{validate:(0,_index.assertNodeType)(\"Declaration\"),optional:true},specifiers:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"ExportSpecifier\")))},source:{validate:(0,_index.assertNodeType)(\"StringLiteral\"),optional:true}}});(0,_index2.default)(\"ExportSpecifier\",{visitor:[\"local\",\"exported\"],aliases:[\"ModuleSpecifier\"],fields:{local:{validate:(0,_index.assertNodeType)(\"Identifier\")},exported:{validate:(0,_index.assertNodeType)(\"Identifier\")}}});(0,_index2.default)(\"ForOfStatement\",{visitor:[\"left\",\"right\",\"body\"],aliases:[\"Scopable\",\"Statement\",\"For\",\"BlockParent\",\"Loop\",\"ForXStatement\"],fields:{left:{validate:(0,_index.assertNodeType)(\"VariableDeclaration\",\"LVal\")},right:{validate:(0,_index.assertNodeType)(\"Expression\")},body:{validate:(0,_index.assertNodeType)(\"Statement\")}}});(0,_index2.default)(\"ImportDeclaration\",{visitor:[\"specifiers\",\"source\"],aliases:[\"Statement\",\"Declaration\",\"ModuleDeclaration\"],fields:{specifiers:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"ImportSpecifier\",\"ImportDefaultSpecifier\",\"ImportNamespaceSpecifier\")))},source:{validate:(0,_index.assertNodeType)(\"StringLiteral\")}}});(0,_index2.default)(\"ImportDefaultSpecifier\",{visitor:[\"local\"],aliases:[\"ModuleSpecifier\"],fields:{local:{validate:(0,_index.assertNodeType)(\"Identifier\")}}});(0,_index2.default)(\"ImportNamespaceSpecifier\",{visitor:[\"local\"],aliases:[\"ModuleSpecifier\"],fields:{local:{validate:(0,_index.assertNodeType)(\"Identifier\")}}});(0,_index2.default)(\"ImportSpecifier\",{visitor:[\"local\",\"imported\"],aliases:[\"ModuleSpecifier\"],fields:{local:{validate:(0,_index.assertNodeType)(\"Identifier\")},imported:{validate:(0,_index.assertNodeType)(\"Identifier\")},importKind:{validate:(0,_index.assertOneOf)(null,\"type\",\"typeof\")}}});(0,_index2.default)(\"MetaProperty\",{visitor:[\"meta\",\"property\"],aliases:[\"Expression\"],fields:{meta:{validate:(0,_index.assertValueType)(\"string\")},property:{validate:(0,_index.assertValueType)(\"string\")}}});(0,_index2.default)(\"ClassMethod\",{aliases:[\"Function\",\"Scopable\",\"BlockParent\",\"FunctionParent\",\"Method\"],builder:[\"kind\",\"key\",\"params\",\"body\",\"computed\",\"static\"],visitor:[\"key\",\"params\",\"body\",\"decorators\",\"returnType\",\"typeParameters\"],fields:{kind:{validate:(0,_index.chain)((0,_index.assertValueType)(\"string\"),(0,_index.assertOneOf)(\"get\",\"set\",\"method\",\"constructor\")),default:\"method\"},computed:{default:false,validate:(0,_index.assertValueType)(\"boolean\")},static:{default:false,validate:(0,_index.assertValueType)(\"boolean\")},key:{validate:function validate(node,key,val){var expectedTypes=node.computed?[\"Expression\"]:[\"Identifier\",\"StringLiteral\",\"NumericLiteral\"];_index.assertNodeType.apply(undefined,expectedTypes)(node,key,val);}},params:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"LVal\")))},body:{validate:(0,_index.assertNodeType)(\"BlockStatement\")},generator:{default:false,validate:(0,_index.assertValueType)(\"boolean\")},async:{default:false,validate:(0,_index.assertValueType)(\"boolean\")}}});(0,_index2.default)(\"ObjectPattern\",{visitor:[\"properties\",\"typeAnnotation\"],aliases:[\"Pattern\",\"LVal\"],fields:{properties:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"RestProperty\",\"Property\")))},decorators:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"Decorator\")))}}});(0,_index2.default)(\"SpreadElement\",{visitor:[\"argument\"],aliases:[\"UnaryLike\"],fields:{argument:{validate:(0,_index.assertNodeType)(\"Expression\")}}});(0,_index2.default)(\"Super\",{aliases:[\"Expression\"]});(0,_index2.default)(\"TaggedTemplateExpression\",{visitor:[\"tag\",\"quasi\"],aliases:[\"Expression\"],fields:{tag:{validate:(0,_index.assertNodeType)(\"Expression\")},quasi:{validate:(0,_index.assertNodeType)(\"TemplateLiteral\")}}});(0,_index2.default)(\"TemplateElement\",{builder:[\"value\",\"tail\"],fields:{value:{},tail:{validate:(0,_index.assertValueType)(\"boolean\"),default:false}}});(0,_index2.default)(\"TemplateLiteral\",{visitor:[\"quasis\",\"expressions\"],aliases:[\"Expression\",\"Literal\"],fields:{quasis:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"TemplateElement\")))},expressions:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"Expression\")))}}});(0,_index2.default)(\"YieldExpression\",{builder:[\"argument\",\"delegate\"],visitor:[\"argument\"],aliases:[\"Expression\",\"Terminatorless\"],fields:{delegate:{validate:(0,_index.assertValueType)(\"boolean\"),default:false},argument:{optional:true,validate:(0,_index.assertNodeType)(\"Expression\")}}});},{\"./index\":51}],49:[function(require,module,exports){\"use strict\";var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}(0,_index2.default)(\"AwaitExpression\",{builder:[\"argument\"],visitor:[\"argument\"],aliases:[\"Expression\",\"Terminatorless\"],fields:{argument:{validate:(0,_index.assertNodeType)(\"Expression\")}}});(0,_index2.default)(\"ForAwaitStatement\",{visitor:[\"left\",\"right\",\"body\"],aliases:[\"Scopable\",\"Statement\",\"For\",\"BlockParent\",\"Loop\",\"ForXStatement\"],fields:{left:{validate:(0,_index.assertNodeType)(\"VariableDeclaration\",\"LVal\")},right:{validate:(0,_index.assertNodeType)(\"Expression\")},body:{validate:(0,_index.assertNodeType)(\"Statement\")}}});(0,_index2.default)(\"BindExpression\",{visitor:[\"object\",\"callee\"],aliases:[\"Expression\"],fields:{}});(0,_index2.default)(\"Import\",{aliases:[\"Expression\"]});(0,_index2.default)(\"Decorator\",{visitor:[\"expression\"],fields:{expression:{validate:(0,_index.assertNodeType)(\"Expression\")}}});(0,_index2.default)(\"DoExpression\",{visitor:[\"body\"],aliases:[\"Expression\"],fields:{body:{validate:(0,_index.assertNodeType)(\"BlockStatement\")}}});(0,_index2.default)(\"ExportDefaultSpecifier\",{visitor:[\"exported\"],aliases:[\"ModuleSpecifier\"],fields:{exported:{validate:(0,_index.assertNodeType)(\"Identifier\")}}});(0,_index2.default)(\"ExportNamespaceSpecifier\",{visitor:[\"exported\"],aliases:[\"ModuleSpecifier\"],fields:{exported:{validate:(0,_index.assertNodeType)(\"Identifier\")}}});(0,_index2.default)(\"RestProperty\",{visitor:[\"argument\"],aliases:[\"UnaryLike\"],fields:{argument:{validate:(0,_index.assertNodeType)(\"LVal\")}}});(0,_index2.default)(\"SpreadProperty\",{visitor:[\"argument\"],aliases:[\"UnaryLike\"],fields:{argument:{validate:(0,_index.assertNodeType)(\"Expression\")}}});},{\"./index\":51}],50:[function(require,module,exports){\"use strict\";var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}(0,_index2.default)(\"AnyTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"],fields:{}});(0,_index2.default)(\"ArrayTypeAnnotation\",{visitor:[\"elementType\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"BooleanTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"],fields:{}});(0,_index2.default)(\"BooleanLiteralTypeAnnotation\",{aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"NullLiteralTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"],fields:{}});(0,_index2.default)(\"ClassImplements\",{visitor:[\"id\",\"typeParameters\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"ClassProperty\",{visitor:[\"key\",\"value\",\"typeAnnotation\",\"decorators\"],builder:[\"key\",\"value\",\"typeAnnotation\",\"decorators\",\"computed\"],aliases:[\"Property\"],fields:{computed:{validate:(0,_index.assertValueType)(\"boolean\"),default:false}}});(0,_index2.default)(\"DeclareClass\",{visitor:[\"id\",\"typeParameters\",\"extends\",\"body\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"DeclareFunction\",{visitor:[\"id\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"DeclareInterface\",{visitor:[\"id\",\"typeParameters\",\"extends\",\"body\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"DeclareModule\",{visitor:[\"id\",\"body\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"DeclareModuleExports\",{visitor:[\"typeAnnotation\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"DeclareTypeAlias\",{visitor:[\"id\",\"typeParameters\",\"right\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"DeclareVariable\",{visitor:[\"id\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"ExistentialTypeParam\",{aliases:[\"Flow\"]});(0,_index2.default)(\"FunctionTypeAnnotation\",{visitor:[\"typeParameters\",\"params\",\"rest\",\"returnType\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"FunctionTypeParam\",{visitor:[\"name\",\"typeAnnotation\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"GenericTypeAnnotation\",{visitor:[\"id\",\"typeParameters\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"InterfaceExtends\",{visitor:[\"id\",\"typeParameters\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"InterfaceDeclaration\",{visitor:[\"id\",\"typeParameters\",\"extends\",\"body\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"IntersectionTypeAnnotation\",{visitor:[\"types\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"MixedTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"]});(0,_index2.default)(\"EmptyTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"]});(0,_index2.default)(\"NullableTypeAnnotation\",{visitor:[\"typeAnnotation\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"NumericLiteralTypeAnnotation\",{aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"NumberTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"],fields:{}});(0,_index2.default)(\"StringLiteralTypeAnnotation\",{aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"StringTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"],fields:{}});(0,_index2.default)(\"ThisTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"],fields:{}});(0,_index2.default)(\"TupleTypeAnnotation\",{visitor:[\"types\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"TypeofTypeAnnotation\",{visitor:[\"argument\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"TypeAlias\",{visitor:[\"id\",\"typeParameters\",\"right\"],aliases:[\"Flow\",\"FlowDeclaration\",\"Statement\",\"Declaration\"],fields:{}});(0,_index2.default)(\"TypeAnnotation\",{visitor:[\"typeAnnotation\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"TypeCastExpression\",{visitor:[\"expression\",\"typeAnnotation\"],aliases:[\"Flow\",\"ExpressionWrapper\",\"Expression\"],fields:{}});(0,_index2.default)(\"TypeParameter\",{visitor:[\"bound\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"TypeParameterDeclaration\",{visitor:[\"params\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"TypeParameterInstantiation\",{visitor:[\"params\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"ObjectTypeAnnotation\",{visitor:[\"properties\",\"indexers\",\"callProperties\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"ObjectTypeCallProperty\",{visitor:[\"value\"],aliases:[\"Flow\",\"UserWhitespacable\"],fields:{}});(0,_index2.default)(\"ObjectTypeIndexer\",{visitor:[\"id\",\"key\",\"value\"],aliases:[\"Flow\",\"UserWhitespacable\"],fields:{}});(0,_index2.default)(\"ObjectTypeProperty\",{visitor:[\"key\",\"value\"],aliases:[\"Flow\",\"UserWhitespacable\"],fields:{}});(0,_index2.default)(\"QualifiedTypeIdentifier\",{visitor:[\"id\",\"qualification\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"UnionTypeAnnotation\",{visitor:[\"types\"],aliases:[\"Flow\"],fields:{}});(0,_index2.default)(\"VoidTypeAnnotation\",{aliases:[\"Flow\",\"FlowBaseAnnotation\"],fields:{}});},{\"./index\":51}],51:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.DEPRECATED_KEYS=exports.BUILDER_KEYS=exports.NODE_FIELDS=exports.ALIAS_KEYS=exports.VISITOR_KEYS=undefined;var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);var _stringify=require(\"babel-runtime/core-js/json/stringify\");var _stringify2=_interopRequireDefault(_stringify);var _typeof2=require(\"babel-runtime/helpers/typeof\");var _typeof3=_interopRequireDefault(_typeof2);exports.assertEach=assertEach;exports.assertOneOf=assertOneOf;exports.assertNodeType=assertNodeType;exports.assertNodeOrValueType=assertNodeOrValueType;exports.assertValueType=assertValueType;exports.chain=chain;exports.default=defineType;var _index=require(\"../index\");var t=_interopRequireWildcard(_index);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var VISITOR_KEYS=exports.VISITOR_KEYS={};var ALIAS_KEYS=exports.ALIAS_KEYS={};var NODE_FIELDS=exports.NODE_FIELDS={};var BUILDER_KEYS=exports.BUILDER_KEYS={};var DEPRECATED_KEYS=exports.DEPRECATED_KEYS={};function getType(val){if(Array.isArray(val)){return\"array\";}else if(val===null){return\"null\";}else if(val===undefined){return\"undefined\";}else{return typeof val===\"undefined\"?\"undefined\":(0,_typeof3.default)(val);}}function assertEach(callback){function validator(node,key,val){if(!Array.isArray(val))return;for(var i=0;i<val.length;i++){callback(node,key+\"[\"+i+\"]\",val[i]);}}validator.each=callback;return validator;}function assertOneOf(){for(var _len=arguments.length,vals=Array(_len),_key=0;_key<_len;_key++){vals[_key]=arguments[_key];}function validate(node,key,val){if(vals.indexOf(val)<0){throw new TypeError(\"Property \"+key+\" expected value to be one of \"+(0,_stringify2.default)(vals)+\" but got \"+(0,_stringify2.default)(val));}}validate.oneOf=vals;return validate;}function assertNodeType(){for(var _len2=arguments.length,types=Array(_len2),_key2=0;_key2<_len2;_key2++){types[_key2]=arguments[_key2];}function validate(node,key,val){var valid=false;for(var _iterator=types,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var type=_ref;if(t.is(type,val)){valid=true;break;}}if(!valid){throw new TypeError(\"Property \"+key+\" of \"+node.type+\" expected node to be of a type \"+(0,_stringify2.default)(types)+\" \"+(\"but instead got \"+(0,_stringify2.default)(val&&val.type)));}}validate.oneOfNodeTypes=types;return validate;}function assertNodeOrValueType(){for(var _len3=arguments.length,types=Array(_len3),_key3=0;_key3<_len3;_key3++){types[_key3]=arguments[_key3];}function validate(node,key,val){var valid=false;for(var _iterator2=types,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var type=_ref2;if(getType(val)===type||t.is(type,val)){valid=true;break;}}if(!valid){throw new TypeError(\"Property \"+key+\" of \"+node.type+\" expected node to be of a type \"+(0,_stringify2.default)(types)+\" \"+(\"but instead got \"+(0,_stringify2.default)(val&&val.type)));}}validate.oneOfNodeOrValueTypes=types;return validate;}function assertValueType(type){function validate(node,key,val){var valid=getType(val)===type;if(!valid){throw new TypeError(\"Property \"+key+\" expected type of \"+type+\" but got \"+getType(val));}}validate.type=type;return validate;}function chain(){for(var _len4=arguments.length,fns=Array(_len4),_key4=0;_key4<_len4;_key4++){fns[_key4]=arguments[_key4];}function validate(){for(var _iterator3=fns,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator3.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var fn=_ref3;fn.apply(undefined,arguments);}}validate.chainOf=fns;return validate;}function defineType(type){var opts=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var inherits=opts.inherits&&store[opts.inherits]||{};opts.fields=opts.fields||inherits.fields||{};opts.visitor=opts.visitor||inherits.visitor||[];opts.aliases=opts.aliases||inherits.aliases||[];opts.builder=opts.builder||inherits.builder||opts.visitor||[];if(opts.deprecatedAlias){DEPRECATED_KEYS[opts.deprecatedAlias]=type;}for(var _iterator4=opts.visitor.concat(opts.builder),_isArray4=Array.isArray(_iterator4),_i4=0,_iterator4=_isArray4?_iterator4:(0,_getIterator3.default)(_iterator4);;){var _ref4;if(_isArray4){if(_i4>=_iterator4.length)break;_ref4=_iterator4[_i4++];}else{_i4=_iterator4.next();if(_i4.done)break;_ref4=_i4.value;}var _key5=_ref4;opts.fields[_key5]=opts.fields[_key5]||{};}for(var key in opts.fields){var field=opts.fields[key];if(opts.builder.indexOf(key)===-1){field.optional=true;}if(field.default===undefined){field.default=null;}else if(!field.validate){field.validate=assertValueType(getType(field.default));}}VISITOR_KEYS[type]=opts.visitor;BUILDER_KEYS[type]=opts.builder;NODE_FIELDS[type]=opts.fields;ALIAS_KEYS[type]=opts.aliases;store[type]=opts;}var store={};},{\"../index\":56,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/core-js/json/stringify\":62,\"babel-runtime/helpers/typeof\":73}],52:[function(require,module,exports){\"use strict\";require(\"./index\");require(\"./core\");require(\"./es2015\");require(\"./flow\");require(\"./jsx\");require(\"./misc\");require(\"./experimental\");},{\"./core\":47,\"./es2015\":48,\"./experimental\":49,\"./flow\":50,\"./index\":51,\"./jsx\":53,\"./misc\":54}],53:[function(require,module,exports){\"use strict\";var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}(0,_index2.default)(\"JSXAttribute\",{visitor:[\"name\",\"value\"],aliases:[\"JSX\",\"Immutable\"],fields:{name:{validate:(0,_index.assertNodeType)(\"JSXIdentifier\",\"JSXNamespacedName\")},value:{optional:true,validate:(0,_index.assertNodeType)(\"JSXElement\",\"StringLiteral\",\"JSXExpressionContainer\")}}});(0,_index2.default)(\"JSXClosingElement\",{visitor:[\"name\"],aliases:[\"JSX\",\"Immutable\"],fields:{name:{validate:(0,_index.assertNodeType)(\"JSXIdentifier\",\"JSXMemberExpression\")}}});(0,_index2.default)(\"JSXElement\",{builder:[\"openingElement\",\"closingElement\",\"children\",\"selfClosing\"],visitor:[\"openingElement\",\"children\",\"closingElement\"],aliases:[\"JSX\",\"Immutable\",\"Expression\"],fields:{openingElement:{validate:(0,_index.assertNodeType)(\"JSXOpeningElement\")},closingElement:{optional:true,validate:(0,_index.assertNodeType)(\"JSXClosingElement\")},children:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"JSXText\",\"JSXExpressionContainer\",\"JSXSpreadChild\",\"JSXElement\")))}}});(0,_index2.default)(\"JSXEmptyExpression\",{aliases:[\"JSX\",\"Expression\"]});(0,_index2.default)(\"JSXExpressionContainer\",{visitor:[\"expression\"],aliases:[\"JSX\",\"Immutable\"],fields:{expression:{validate:(0,_index.assertNodeType)(\"Expression\")}}});(0,_index2.default)(\"JSXSpreadChild\",{visitor:[\"expression\"],aliases:[\"JSX\",\"Immutable\"],fields:{expression:{validate:(0,_index.assertNodeType)(\"Expression\")}}});(0,_index2.default)(\"JSXIdentifier\",{builder:[\"name\"],aliases:[\"JSX\",\"Expression\"],fields:{name:{validate:(0,_index.assertValueType)(\"string\")}}});(0,_index2.default)(\"JSXMemberExpression\",{visitor:[\"object\",\"property\"],aliases:[\"JSX\",\"Expression\"],fields:{object:{validate:(0,_index.assertNodeType)(\"JSXMemberExpression\",\"JSXIdentifier\")},property:{validate:(0,_index.assertNodeType)(\"JSXIdentifier\")}}});(0,_index2.default)(\"JSXNamespacedName\",{visitor:[\"namespace\",\"name\"],aliases:[\"JSX\"],fields:{namespace:{validate:(0,_index.assertNodeType)(\"JSXIdentifier\")},name:{validate:(0,_index.assertNodeType)(\"JSXIdentifier\")}}});(0,_index2.default)(\"JSXOpeningElement\",{builder:[\"name\",\"attributes\",\"selfClosing\"],visitor:[\"name\",\"attributes\"],aliases:[\"JSX\",\"Immutable\"],fields:{name:{validate:(0,_index.assertNodeType)(\"JSXIdentifier\",\"JSXMemberExpression\")},selfClosing:{default:false,validate:(0,_index.assertValueType)(\"boolean\")},attributes:{validate:(0,_index.chain)((0,_index.assertValueType)(\"array\"),(0,_index.assertEach)((0,_index.assertNodeType)(\"JSXAttribute\",\"JSXSpreadAttribute\")))}}});(0,_index2.default)(\"JSXSpreadAttribute\",{visitor:[\"argument\"],aliases:[\"JSX\"],fields:{argument:{validate:(0,_index.assertNodeType)(\"Expression\")}}});(0,_index2.default)(\"JSXText\",{aliases:[\"JSX\",\"Immutable\"],builder:[\"value\"],fields:{value:{validate:(0,_index.assertValueType)(\"string\")}}});},{\"./index\":51}],54:[function(require,module,exports){\"use strict\";var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}(0,_index2.default)(\"Noop\",{visitor:[]});(0,_index2.default)(\"ParenthesizedExpression\",{visitor:[\"expression\"],aliases:[\"Expression\",\"ExpressionWrapper\"],fields:{expression:{validate:(0,_index.assertNodeType)(\"Expression\")}}});},{\"./index\":51}],55:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.createUnionTypeAnnotation=createUnionTypeAnnotation;exports.removeTypeDuplicates=removeTypeDuplicates;exports.createTypeAnnotationBasedOnTypeof=createTypeAnnotationBasedOnTypeof;var _index=require(\"./index\");var t=_interopRequireWildcard(_index);function _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;}}function createUnionTypeAnnotation(types){var flattened=removeTypeDuplicates(types);if(flattened.length===1){return flattened[0];}else{return t.unionTypeAnnotation(flattened);}}function removeTypeDuplicates(nodes){var generics={};var bases={};var typeGroups=[];var types=[];for(var i=0;i<nodes.length;i++){var node=nodes[i];if(!node)continue;if(types.indexOf(node)>=0){continue;}if(t.isAnyTypeAnnotation(node)){return[node];}if(t.isFlowBaseAnnotation(node)){bases[node.type]=node;continue;}if(t.isUnionTypeAnnotation(node)){if(typeGroups.indexOf(node.types)<0){nodes=nodes.concat(node.types);typeGroups.push(node.types);}continue;}if(t.isGenericTypeAnnotation(node)){var name=node.id.name;if(generics[name]){var existing=generics[name];if(existing.typeParameters){if(node.typeParameters){existing.typeParameters.params=removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params));}}else{existing=node.typeParameters;}}else{generics[name]=node;}continue;}types.push(node);}for(var type in bases){types.push(bases[type]);}for(var _name in generics){types.push(generics[_name]);}return types;}function createTypeAnnotationBasedOnTypeof(type){if(type===\"string\"){return t.stringTypeAnnotation();}else if(type===\"number\"){return t.numberTypeAnnotation();}else if(type===\"undefined\"){return t.voidTypeAnnotation();}else if(type===\"boolean\"){return t.booleanTypeAnnotation();}else if(type===\"function\"){return t.genericTypeAnnotation(t.identifier(\"Function\"));}else if(type===\"object\"){return t.genericTypeAnnotation(t.identifier(\"Object\"));}else if(type===\"symbol\"){return t.genericTypeAnnotation(t.identifier(\"Symbol\"));}else{throw new Error(\"Invalid typeof value\");}}},{\"./index\":56}],56:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.createTypeAnnotationBasedOnTypeof=exports.removeTypeDuplicates=exports.createUnionTypeAnnotation=exports.valueToNode=exports.toBlock=exports.toExpression=exports.toStatement=exports.toBindingIdentifierName=exports.toIdentifier=exports.toKeyAlias=exports.toSequenceExpression=exports.toComputedKey=exports.isNodesEquivalent=exports.isImmutable=exports.isScope=exports.isSpecifierDefault=exports.isVar=exports.isBlockScoped=exports.isLet=exports.isValidIdentifier=exports.isReferenced=exports.isBinding=exports.getOuterBindingIdentifiers=exports.getBindingIdentifiers=exports.TYPES=exports.react=exports.DEPRECATED_KEYS=exports.BUILDER_KEYS=exports.NODE_FIELDS=exports.ALIAS_KEYS=exports.VISITOR_KEYS=exports.NOT_LOCAL_BINDING=exports.BLOCK_SCOPED_SYMBOL=exports.INHERIT_KEYS=exports.UNARY_OPERATORS=exports.STRING_UNARY_OPERATORS=exports.NUMBER_UNARY_OPERATORS=exports.BOOLEAN_UNARY_OPERATORS=exports.BINARY_OPERATORS=exports.NUMBER_BINARY_OPERATORS=exports.BOOLEAN_BINARY_OPERATORS=exports.COMPARISON_BINARY_OPERATORS=exports.EQUALITY_BINARY_OPERATORS=exports.BOOLEAN_NUMBER_BINARY_OPERATORS=exports.UPDATE_OPERATORS=exports.LOGICAL_OPERATORS=exports.COMMENT_KEYS=exports.FOR_INIT_KEYS=exports.FLATTENABLE_KEYS=exports.STATEMENT_OR_BLOCK_KEYS=undefined;var _getOwnPropertySymbols=require(\"babel-runtime/core-js/object/get-own-property-symbols\");var _getOwnPropertySymbols2=_interopRequireDefault(_getOwnPropertySymbols);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);var _keys=require(\"babel-runtime/core-js/object/keys\");var _keys2=_interopRequireDefault(_keys);var _stringify=require(\"babel-runtime/core-js/json/stringify\");var _stringify2=_interopRequireDefault(_stringify);var _constants=require(\"./constants\");Object.defineProperty(exports,\"STATEMENT_OR_BLOCK_KEYS\",{enumerable:true,get:function get(){return _constants.STATEMENT_OR_BLOCK_KEYS;}});Object.defineProperty(exports,\"FLATTENABLE_KEYS\",{enumerable:true,get:function get(){return _constants.FLATTENABLE_KEYS;}});Object.defineProperty(exports,\"FOR_INIT_KEYS\",{enumerable:true,get:function get(){return _constants.FOR_INIT_KEYS;}});Object.defineProperty(exports,\"COMMENT_KEYS\",{enumerable:true,get:function get(){return _constants.COMMENT_KEYS;}});Object.defineProperty(exports,\"LOGICAL_OPERATORS\",{enumerable:true,get:function get(){return _constants.LOGICAL_OPERATORS;}});Object.defineProperty(exports,\"UPDATE_OPERATORS\",{enumerable:true,get:function get(){return _constants.UPDATE_OPERATORS;}});Object.defineProperty(exports,\"BOOLEAN_NUMBER_BINARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.BOOLEAN_NUMBER_BINARY_OPERATORS;}});Object.defineProperty(exports,\"EQUALITY_BINARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.EQUALITY_BINARY_OPERATORS;}});Object.defineProperty(exports,\"COMPARISON_BINARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.COMPARISON_BINARY_OPERATORS;}});Object.defineProperty(exports,\"BOOLEAN_BINARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.BOOLEAN_BINARY_OPERATORS;}});Object.defineProperty(exports,\"NUMBER_BINARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.NUMBER_BINARY_OPERATORS;}});Object.defineProperty(exports,\"BINARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.BINARY_OPERATORS;}});Object.defineProperty(exports,\"BOOLEAN_UNARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.BOOLEAN_UNARY_OPERATORS;}});Object.defineProperty(exports,\"NUMBER_UNARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.NUMBER_UNARY_OPERATORS;}});Object.defineProperty(exports,\"STRING_UNARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.STRING_UNARY_OPERATORS;}});Object.defineProperty(exports,\"UNARY_OPERATORS\",{enumerable:true,get:function get(){return _constants.UNARY_OPERATORS;}});Object.defineProperty(exports,\"INHERIT_KEYS\",{enumerable:true,get:function get(){return _constants.INHERIT_KEYS;}});Object.defineProperty(exports,\"BLOCK_SCOPED_SYMBOL\",{enumerable:true,get:function get(){return _constants.BLOCK_SCOPED_SYMBOL;}});Object.defineProperty(exports,\"NOT_LOCAL_BINDING\",{enumerable:true,get:function get(){return _constants.NOT_LOCAL_BINDING;}});exports.is=is;exports.isType=isType;exports.validate=validate;exports.shallowEqual=shallowEqual;exports.appendToMemberExpression=appendToMemberExpression;exports.prependToMemberExpression=prependToMemberExpression;exports.ensureBlock=ensureBlock;exports.clone=clone;exports.cloneWithoutLoc=cloneWithoutLoc;exports.cloneDeep=cloneDeep;exports.buildMatchMemberExpression=buildMatchMemberExpression;exports.removeComments=removeComments;exports.inheritsComments=inheritsComments;exports.inheritTrailingComments=inheritTrailingComments;exports.inheritLeadingComments=inheritLeadingComments;exports.inheritInnerComments=inheritInnerComments;exports.inherits=inherits;exports.assertNode=assertNode;exports.isNode=isNode;exports.traverseFast=traverseFast;exports.removeProperties=removeProperties;exports.removePropertiesDeep=removePropertiesDeep;var _retrievers=require(\"./retrievers\");Object.defineProperty(exports,\"getBindingIdentifiers\",{enumerable:true,get:function get(){return _retrievers.getBindingIdentifiers;}});Object.defineProperty(exports,\"getOuterBindingIdentifiers\",{enumerable:true,get:function get(){return _retrievers.getOuterBindingIdentifiers;}});var _validators=require(\"./validators\");Object.defineProperty(exports,\"isBinding\",{enumerable:true,get:function get(){return _validators.isBinding;}});Object.defineProperty(exports,\"isReferenced\",{enumerable:true,get:function get(){return _validators.isReferenced;}});Object.defineProperty(exports,\"isValidIdentifier\",{enumerable:true,get:function get(){return _validators.isValidIdentifier;}});Object.defineProperty(exports,\"isLet\",{enumerable:true,get:function get(){return _validators.isLet;}});Object.defineProperty(exports,\"isBlockScoped\",{enumerable:true,get:function get(){return _validators.isBlockScoped;}});Object.defineProperty(exports,\"isVar\",{enumerable:true,get:function get(){return _validators.isVar;}});Object.defineProperty(exports,\"isSpecifierDefault\",{enumerable:true,get:function get(){return _validators.isSpecifierDefault;}});Object.defineProperty(exports,\"isScope\",{enumerable:true,get:function get(){return _validators.isScope;}});Object.defineProperty(exports,\"isImmutable\",{enumerable:true,get:function get(){return _validators.isImmutable;}});Object.defineProperty(exports,\"isNodesEquivalent\",{enumerable:true,get:function get(){return _validators.isNodesEquivalent;}});var _converters=require(\"./converters\");Object.defineProperty(exports,\"toComputedKey\",{enumerable:true,get:function get(){return _converters.toComputedKey;}});Object.defineProperty(exports,\"toSequenceExpression\",{enumerable:true,get:function get(){return _converters.toSequenceExpression;}});Object.defineProperty(exports,\"toKeyAlias\",{enumerable:true,get:function get(){return _converters.toKeyAlias;}});Object.defineProperty(exports,\"toIdentifier\",{enumerable:true,get:function get(){return _converters.toIdentifier;}});Object.defineProperty(exports,\"toBindingIdentifierName\",{enumerable:true,get:function get(){return _converters.toBindingIdentifierName;}});Object.defineProperty(exports,\"toStatement\",{enumerable:true,get:function get(){return _converters.toStatement;}});Object.defineProperty(exports,\"toExpression\",{enumerable:true,get:function get(){return _converters.toExpression;}});Object.defineProperty(exports,\"toBlock\",{enumerable:true,get:function get(){return _converters.toBlock;}});Object.defineProperty(exports,\"valueToNode\",{enumerable:true,get:function get(){return _converters.valueToNode;}});var _flow=require(\"./flow\");Object.defineProperty(exports,\"createUnionTypeAnnotation\",{enumerable:true,get:function get(){return _flow.createUnionTypeAnnotation;}});Object.defineProperty(exports,\"removeTypeDuplicates\",{enumerable:true,get:function get(){return _flow.removeTypeDuplicates;}});Object.defineProperty(exports,\"createTypeAnnotationBasedOnTypeof\",{enumerable:true,get:function get(){return _flow.createTypeAnnotationBasedOnTypeof;}});var _toFastProperties=require(\"to-fast-properties\");var _toFastProperties2=_interopRequireDefault(_toFastProperties);var _clone=require(\"lodash/clone\");var _clone2=_interopRequireDefault(_clone);var _uniq=require(\"lodash/uniq\");var _uniq2=_interopRequireDefault(_uniq);require(\"./definitions/init\");var _definitions=require(\"./definitions\");var _react2=require(\"./react\");var _react=_interopRequireWildcard(_react2);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var t=exports;function registerType(type){var is=t[\"is\"+type];if(!is){is=t[\"is\"+type]=function(node,opts){return t.is(type,node,opts);};}t[\"assert\"+type]=function(node,opts){opts=opts||{};if(!is(node,opts)){throw new Error(\"Expected type \"+(0,_stringify2.default)(type)+\" with option \"+(0,_stringify2.default)(opts));}};}exports.VISITOR_KEYS=_definitions.VISITOR_KEYS;exports.ALIAS_KEYS=_definitions.ALIAS_KEYS;exports.NODE_FIELDS=_definitions.NODE_FIELDS;exports.BUILDER_KEYS=_definitions.BUILDER_KEYS;exports.DEPRECATED_KEYS=_definitions.DEPRECATED_KEYS;exports.react=_react;for(var type in t.VISITOR_KEYS){registerType(type);}t.FLIPPED_ALIAS_KEYS={};(0,_keys2.default)(t.ALIAS_KEYS).forEach(function(type){t.ALIAS_KEYS[type].forEach(function(alias){var types=t.FLIPPED_ALIAS_KEYS[alias]=t.FLIPPED_ALIAS_KEYS[alias]||[];types.push(type);});});(0,_keys2.default)(t.FLIPPED_ALIAS_KEYS).forEach(function(type){t[type.toUpperCase()+\"_TYPES\"]=t.FLIPPED_ALIAS_KEYS[type];registerType(type);});var TYPES=exports.TYPES=(0,_keys2.default)(t.VISITOR_KEYS).concat((0,_keys2.default)(t.FLIPPED_ALIAS_KEYS)).concat((0,_keys2.default)(t.DEPRECATED_KEYS));function is(type,node,opts){if(!node)return false;var matches=isType(node.type,type);if(!matches)return false;if(typeof opts===\"undefined\"){return true;}else{return t.shallowEqual(node,opts);}}function isType(nodeType,targetType){if(nodeType===targetType)return true;if(t.ALIAS_KEYS[targetType])return false;var aliases=t.FLIPPED_ALIAS_KEYS[targetType];if(aliases){if(aliases[0]===nodeType)return true;for(var _iterator=aliases,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var alias=_ref;if(nodeType===alias)return true;}}return false;}(0,_keys2.default)(t.BUILDER_KEYS).forEach(function(type){var keys=t.BUILDER_KEYS[type];function builder(){if(arguments.length>keys.length){throw new Error(\"t.\"+type+\": Too many arguments passed. Received \"+arguments.length+\" but can receive \"+(\"no more than \"+keys.length));}var node={};node.type=type;var i=0;for(var _iterator2=keys,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var _key=_ref2;var field=t.NODE_FIELDS[type][_key];var arg=arguments[i++];if(arg===undefined)arg=(0,_clone2.default)(field.default);node[_key]=arg;}for(var key in node){validate(node,key,node[key]);}return node;}t[type]=builder;t[type[0].toLowerCase()+type.slice(1)]=builder;});var _loop=function _loop(_type){var newType=t.DEPRECATED_KEYS[_type];function proxy(fn){return function(){console.trace(\"The node type \"+_type+\" has been renamed to \"+newType);return fn.apply(this,arguments);};}t[_type]=t[_type[0].toLowerCase()+_type.slice(1)]=proxy(t[newType]);t[\"is\"+_type]=proxy(t[\"is\"+newType]);t[\"assert\"+_type]=proxy(t[\"assert\"+newType]);};for(var _type in t.DEPRECATED_KEYS){_loop(_type);}function validate(node,key,val){if(!node)return;var fields=t.NODE_FIELDS[node.type];if(!fields)return;var field=fields[key];if(!field||!field.validate)return;if(field.optional&&val==null)return;field.validate(node,key,val);}function shallowEqual(actual,expected){var keys=(0,_keys2.default)(expected);for(var _iterator3=keys,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator3.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var key=_ref3;if(actual[key]!==expected[key]){return false;}}return true;}function appendToMemberExpression(member,append,computed){member.object=t.memberExpression(member.object,member.property,member.computed);member.property=append;member.computed=!!computed;return member;}function prependToMemberExpression(member,prepend){member.object=t.memberExpression(prepend,member.object);return member;}function ensureBlock(node){var key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:\"body\";return node[key]=t.toBlock(node[key],node);}function clone(node){if(!node)return node;var newNode={};for(var key in node){if(key[0]===\"_\")continue;newNode[key]=node[key];}return newNode;}function cloneWithoutLoc(node){var newNode=clone(node);delete newNode.loc;return newNode;}function cloneDeep(node){if(!node)return node;var newNode={};for(var key in node){if(key[0]===\"_\")continue;var val=node[key];if(val){if(val.type){val=t.cloneDeep(val);}else if(Array.isArray(val)){val=val.map(t.cloneDeep);}}newNode[key]=val;}return newNode;}function buildMatchMemberExpression(match,allowPartial){var parts=match.split(\".\");return function(member){if(!t.isMemberExpression(member))return false;var search=[member];var i=0;while(search.length){var node=search.shift();if(allowPartial&&i===parts.length){return true;}if(t.isIdentifier(node)){if(parts[i]!==node.name)return false;}else if(t.isStringLiteral(node)){if(parts[i]!==node.value)return false;}else if(t.isMemberExpression(node)){if(node.computed&&!t.isStringLiteral(node.property)){return false;}else{search.push(node.object);search.push(node.property);continue;}}else{return false;}if(++i>parts.length){return false;}}return true;};}function removeComments(node){for(var _iterator4=t.COMMENT_KEYS,_isArray4=Array.isArray(_iterator4),_i4=0,_iterator4=_isArray4?_iterator4:(0,_getIterator3.default)(_iterator4);;){var _ref4;if(_isArray4){if(_i4>=_iterator4.length)break;_ref4=_iterator4[_i4++];}else{_i4=_iterator4.next();if(_i4.done)break;_ref4=_i4.value;}var key=_ref4;delete node[key];}return node;}function inheritsComments(child,parent){inheritTrailingComments(child,parent);inheritLeadingComments(child,parent);inheritInnerComments(child,parent);return child;}function inheritTrailingComments(child,parent){_inheritComments(\"trailingComments\",child,parent);}function inheritLeadingComments(child,parent){_inheritComments(\"leadingComments\",child,parent);}function inheritInnerComments(child,parent){_inheritComments(\"innerComments\",child,parent);}function _inheritComments(key,child,parent){if(child&&parent){child[key]=(0,_uniq2.default)([].concat(child[key],parent[key]).filter(Boolean));}}function inherits(child,parent){if(!child||!parent)return child;for(var _iterator5=t.INHERIT_KEYS.optional,_isArray5=Array.isArray(_iterator5),_i5=0,_iterator5=_isArray5?_iterator5:(0,_getIterator3.default)(_iterator5);;){var _ref5;if(_isArray5){if(_i5>=_iterator5.length)break;_ref5=_iterator5[_i5++];}else{_i5=_iterator5.next();if(_i5.done)break;_ref5=_i5.value;}var _key2=_ref5;if(child[_key2]==null){child[_key2]=parent[_key2];}}for(var key in parent){if(key[0]===\"_\")child[key]=parent[key];}for(var _iterator6=t.INHERIT_KEYS.force,_isArray6=Array.isArray(_iterator6),_i6=0,_iterator6=_isArray6?_iterator6:(0,_getIterator3.default)(_iterator6);;){var _ref6;if(_isArray6){if(_i6>=_iterator6.length)break;_ref6=_iterator6[_i6++];}else{_i6=_iterator6.next();if(_i6.done)break;_ref6=_i6.value;}var _key3=_ref6;child[_key3]=parent[_key3];}t.inheritsComments(child,parent);return child;}function assertNode(node){if(!isNode(node)){throw new TypeError(\"Not a valid node \"+(node&&node.type));}}function isNode(node){return!!(node&&_definitions.VISITOR_KEYS[node.type]);}(0,_toFastProperties2.default)(t);(0,_toFastProperties2.default)(t.VISITOR_KEYS);function traverseFast(node,enter,opts){if(!node)return;var keys=t.VISITOR_KEYS[node.type];if(!keys)return;opts=opts||{};enter(node,opts);for(var _iterator7=keys,_isArray7=Array.isArray(_iterator7),_i7=0,_iterator7=_isArray7?_iterator7:(0,_getIterator3.default)(_iterator7);;){var _ref7;if(_isArray7){if(_i7>=_iterator7.length)break;_ref7=_iterator7[_i7++];}else{_i7=_iterator7.next();if(_i7.done)break;_ref7=_i7.value;}var key=_ref7;var subNode=node[key];if(Array.isArray(subNode)){for(var _iterator8=subNode,_isArray8=Array.isArray(_iterator8),_i8=0,_iterator8=_isArray8?_iterator8:(0,_getIterator3.default)(_iterator8);;){var _ref8;if(_isArray8){if(_i8>=_iterator8.length)break;_ref8=_iterator8[_i8++];}else{_i8=_iterator8.next();if(_i8.done)break;_ref8=_i8.value;}var _node=_ref8;traverseFast(_node,enter,opts);}}else{traverseFast(subNode,enter,opts);}}}var CLEAR_KEYS=[\"tokens\",\"start\",\"end\",\"loc\",\"raw\",\"rawValue\"];var CLEAR_KEYS_PLUS_COMMENTS=t.COMMENT_KEYS.concat([\"comments\"]).concat(CLEAR_KEYS);function removeProperties(node,opts){opts=opts||{};var map=opts.preserveComments?CLEAR_KEYS:CLEAR_KEYS_PLUS_COMMENTS;for(var _iterator9=map,_isArray9=Array.isArray(_iterator9),_i9=0,_iterator9=_isArray9?_iterator9:(0,_getIterator3.default)(_iterator9);;){var _ref9;if(_isArray9){if(_i9>=_iterator9.length)break;_ref9=_iterator9[_i9++];}else{_i9=_iterator9.next();if(_i9.done)break;_ref9=_i9.value;}var _key4=_ref9;if(node[_key4]!=null)node[_key4]=undefined;}for(var key in node){if(key[0]===\"_\"&&node[key]!=null)node[key]=undefined;}var syms=(0,_getOwnPropertySymbols2.default)(node);for(var _iterator10=syms,_isArray10=Array.isArray(_iterator10),_i10=0,_iterator10=_isArray10?_iterator10:(0,_getIterator3.default)(_iterator10);;){var _ref10;if(_isArray10){if(_i10>=_iterator10.length)break;_ref10=_iterator10[_i10++];}else{_i10=_iterator10.next();if(_i10.done)break;_ref10=_i10.value;}var sym=_ref10;node[sym]=null;}}function removePropertiesDeep(tree,opts){traverseFast(tree,removeProperties,opts);return tree;}},{\"./constants\":45,\"./converters\":46,\"./definitions\":51,\"./definitions/init\":52,\"./flow\":55,\"./react\":57,\"./retrievers\":58,\"./validators\":59,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/core-js/json/stringify\":62,\"babel-runtime/core-js/object/get-own-property-symbols\":66,\"babel-runtime/core-js/object/keys\":67,\"lodash/clone\":545,\"lodash/uniq\":575,\"to-fast-properties\":596}],57:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.isReactComponent=undefined;exports.isCompatTag=isCompatTag;exports.buildChildren=buildChildren;var _index=require(\"./index\");var t=_interopRequireWildcard(_index);function _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;}}var isReactComponent=exports.isReactComponent=t.buildMatchMemberExpression(\"React.Component\");function isCompatTag(tagName){return!!tagName&&/^[a-z]|\\-/.test(tagName);}function cleanJSXElementLiteralChild(child,args){var lines=child.value.split(/\\r\\n|\\n|\\r/);var lastNonEmptyLine=0;for(var i=0;i<lines.length;i++){if(lines[i].match(/[^ \\t]/)){lastNonEmptyLine=i;}}var str=\"\";for(var _i=0;_i<lines.length;_i++){var line=lines[_i];var isFirstLine=_i===0;var isLastLine=_i===lines.length-1;var isLastNonEmptyLine=_i===lastNonEmptyLine;var trimmedLine=line.replace(/\\t/g,\" \");if(!isFirstLine){trimmedLine=trimmedLine.replace(/^[ ]+/,\"\");}if(!isLastLine){trimmedLine=trimmedLine.replace(/[ ]+$/,\"\");}if(trimmedLine){if(!isLastNonEmptyLine){trimmedLine+=\" \";}str+=trimmedLine;}}if(str)args.push(t.stringLiteral(str));}function buildChildren(node){var elems=[];for(var i=0;i<node.children.length;i++){var child=node.children[i];if(t.isJSXText(child)){cleanJSXElementLiteralChild(child,elems);continue;}if(t.isJSXExpressionContainer(child))child=child.expression;if(t.isJSXEmptyExpression(child))continue;elems.push(child);}return elems;}},{\"./index\":56}],58:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _create=require(\"babel-runtime/core-js/object/create\");var _create2=_interopRequireDefault(_create);exports.getBindingIdentifiers=getBindingIdentifiers;exports.getOuterBindingIdentifiers=getOuterBindingIdentifiers;var _index=require(\"./index\");var t=_interopRequireWildcard(_index);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function getBindingIdentifiers(node,duplicates,outerOnly){var search=[].concat(node);var ids=(0,_create2.default)(null);while(search.length){var id=search.shift();if(!id)continue;var keys=t.getBindingIdentifiers.keys[id.type];if(t.isIdentifier(id)){if(duplicates){var _ids=ids[id.name]=ids[id.name]||[];_ids.push(id);}else{ids[id.name]=id;}continue;}if(t.isExportDeclaration(id)){if(t.isDeclaration(id.declaration)){search.push(id.declaration);}continue;}if(outerOnly){if(t.isFunctionDeclaration(id)){search.push(id.id);continue;}if(t.isFunctionExpression(id)){continue;}}if(keys){for(var i=0;i<keys.length;i++){var key=keys[i];if(id[key]){search=search.concat(id[key]);}}}}return ids;}getBindingIdentifiers.keys={DeclareClass:[\"id\"],DeclareFunction:[\"id\"],DeclareModule:[\"id\"],DeclareVariable:[\"id\"],InterfaceDeclaration:[\"id\"],TypeAlias:[\"id\"],CatchClause:[\"param\"],LabeledStatement:[\"label\"],UnaryExpression:[\"argument\"],AssignmentExpression:[\"left\"],ImportSpecifier:[\"local\"],ImportNamespaceSpecifier:[\"local\"],ImportDefaultSpecifier:[\"local\"],ImportDeclaration:[\"specifiers\"],ExportSpecifier:[\"exported\"],ExportNamespaceSpecifier:[\"exported\"],ExportDefaultSpecifier:[\"exported\"],FunctionDeclaration:[\"id\",\"params\"],FunctionExpression:[\"id\",\"params\"],ClassDeclaration:[\"id\"],ClassExpression:[\"id\"],RestElement:[\"argument\"],UpdateExpression:[\"argument\"],RestProperty:[\"argument\"],ObjectProperty:[\"value\"],AssignmentPattern:[\"left\"],ArrayPattern:[\"elements\"],ObjectPattern:[\"properties\"],VariableDeclaration:[\"declarations\"],VariableDeclarator:[\"id\"]};function getOuterBindingIdentifiers(node,duplicates){return getBindingIdentifiers(node,duplicates,true);}},{\"./index\":56,\"babel-runtime/core-js/object/create\":65}],59:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _keys=require(\"babel-runtime/core-js/object/keys\");var _keys2=_interopRequireDefault(_keys);var _typeof2=require(\"babel-runtime/helpers/typeof\");var _typeof3=_interopRequireDefault(_typeof2);var _getIterator2=require(\"babel-runtime/core-js/get-iterator\");var _getIterator3=_interopRequireDefault(_getIterator2);exports.isBinding=isBinding;exports.isReferenced=isReferenced;exports.isValidIdentifier=isValidIdentifier;exports.isLet=isLet;exports.isBlockScoped=isBlockScoped;exports.isVar=isVar;exports.isSpecifierDefault=isSpecifierDefault;exports.isScope=isScope;exports.isImmutable=isImmutable;exports.isNodesEquivalent=isNodesEquivalent;var _retrievers=require(\"./retrievers\");var _esutils=require(\"esutils\");var _esutils2=_interopRequireDefault(_esutils);var _index=require(\"./index\");var t=_interopRequireWildcard(_index);var _constants=require(\"./constants\");function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function isBinding(node,parent){var keys=_retrievers.getBindingIdentifiers.keys[parent.type];if(keys){for(var i=0;i<keys.length;i++){var key=keys[i];var val=parent[key];if(Array.isArray(val)){if(val.indexOf(node)>=0)return true;}else{if(val===node)return true;}}}return false;}function isReferenced(node,parent){switch(parent.type){case\"BindExpression\":return parent.object===node||parent.callee===node;case\"MemberExpression\":case\"JSXMemberExpression\":if(parent.property===node&&parent.computed){return true;}else if(parent.object===node){return true;}else{return false;}case\"MetaProperty\":return false;case\"ObjectProperty\":if(parent.key===node){return parent.computed;}case\"VariableDeclarator\":return parent.id!==node;case\"ArrowFunctionExpression\":case\"FunctionDeclaration\":case\"FunctionExpression\":for(var _iterator=parent.params,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator3.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var param=_ref;if(param===node)return false;}return parent.id!==node;case\"ExportSpecifier\":if(parent.source){return false;}else{return parent.local===node;}case\"ExportNamespaceSpecifier\":case\"ExportDefaultSpecifier\":return false;case\"JSXAttribute\":return parent.name!==node;case\"ClassProperty\":if(parent.key===node){return parent.computed;}else{return parent.value===node;}case\"ImportDefaultSpecifier\":case\"ImportNamespaceSpecifier\":case\"ImportSpecifier\":return false;case\"ClassDeclaration\":case\"ClassExpression\":return parent.id!==node;case\"ClassMethod\":case\"ObjectMethod\":return parent.key===node&&parent.computed;case\"LabeledStatement\":return false;case\"CatchClause\":return parent.param!==node;case\"RestElement\":return false;case\"AssignmentExpression\":return parent.right===node;case\"AssignmentPattern\":return parent.right===node;case\"ObjectPattern\":case\"ArrayPattern\":return false;}return true;}function isValidIdentifier(name){if(typeof name!==\"string\"||_esutils2.default.keyword.isReservedWordES6(name,true)){return false;}else{return _esutils2.default.keyword.isIdentifierNameES6(name);}}function isLet(node){return t.isVariableDeclaration(node)&&(node.kind!==\"var\"||node[_constants.BLOCK_SCOPED_SYMBOL]);}function isBlockScoped(node){return t.isFunctionDeclaration(node)||t.isClassDeclaration(node)||t.isLet(node);}function isVar(node){return t.isVariableDeclaration(node,{kind:\"var\"})&&!node[_constants.BLOCK_SCOPED_SYMBOL];}function isSpecifierDefault(specifier){return t.isImportDefaultSpecifier(specifier)||t.isIdentifier(specifier.imported||specifier.exported,{name:\"default\"});}function isScope(node,parent){if(t.isBlockStatement(node)&&t.isFunction(parent,{body:node})){return false;}return t.isScopable(node);}function isImmutable(node){if(t.isType(node.type,\"Immutable\"))return true;if(t.isIdentifier(node)){if(node.name===\"undefined\"){return true;}else{return false;}}return false;}function isNodesEquivalent(a,b){if((typeof a===\"undefined\"?\"undefined\":(0,_typeof3.default)(a))!==\"object\"||(typeof a===\"undefined\"?\"undefined\":(0,_typeof3.default)(a))!==\"object\"||a==null||b==null){return a===b;}if(a.type!==b.type){return false;}var fields=(0,_keys2.default)(t.NODE_FIELDS[a.type]||a.type);for(var _iterator2=fields,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator3.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var field=_ref2;if((0,_typeof3.default)(a[field])!==(0,_typeof3.default)(b[field])){return false;}if(Array.isArray(a[field])){if(!Array.isArray(b[field])){return false;}if(a[field].length!==b[field].length){return false;}for(var i=0;i<a[field].length;i++){if(!isNodesEquivalent(a[field][i],b[field][i])){return false;}}continue;}if(!isNodesEquivalent(a[field],b[field])){return false;}}return true;}},{\"./constants\":45,\"./index\":56,\"./retrievers\":58,\"babel-runtime/core-js/get-iterator\":61,\"babel-runtime/core-js/object/keys\":67,\"babel-runtime/helpers/typeof\":73,\"esutils\":365}],60:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.MESSAGES=undefined;var _stringify=require(\"babel-runtime/core-js/json/stringify\");var _stringify2=_interopRequireDefault(_stringify);exports.get=get;exports.parseArgs=parseArgs;var _util=require(\"util\");var util=_interopRequireWildcard(_util);function _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;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var MESSAGES=exports.MESSAGES={tailCallReassignmentDeopt:\"Function reference has been reassigned, so it will probably be dereferenced, therefore we can't optimise this with confidence\",classesIllegalBareSuper:\"Illegal use of bare super\",classesIllegalSuperCall:\"Direct super call is illegal in non-constructor, use super.$1() instead\",scopeDuplicateDeclaration:\"Duplicate declaration $1\",settersNoRest:\"Setters aren't allowed to have a rest\",noAssignmentsInForHead:\"No assignments allowed in for-in/of head\",expectedMemberExpressionOrIdentifier:\"Expected type MemberExpression or Identifier\",invalidParentForThisNode:\"We don't know how to handle this node within the current parent - please open an issue\",readOnly:\"$1 is read-only\",unknownForHead:\"Unknown node type $1 in ForStatement\",didYouMean:\"Did you mean $1?\",codeGeneratorDeopt:\"Note: The code generator has deoptimised the styling of $1 as it exceeds the max of $2.\",missingTemplatesDirectory:\"no templates directory - this is most likely the result of a broken `npm publish`. Please report to https://github.com/babel/babel/issues\",unsupportedOutputType:\"Unsupported output type $1\",illegalMethodName:\"Illegal method name $1\",lostTrackNodePath:\"We lost track of this node's position, likely because the AST was directly manipulated\",modulesIllegalExportName:\"Illegal export $1\",modulesDuplicateDeclarations:\"Duplicate module declarations with the same source but in different scopes\",undeclaredVariable:\"Reference to undeclared variable $1\",undeclaredVariableType:\"Referencing a type alias outside of a type annotation\",undeclaredVariableSuggestion:\"Reference to undeclared variable $1 - did you mean $2?\",traverseNeedsParent:\"You must pass a scope and parentPath unless traversing a Program/File. Instead of that you tried to traverse a $1 node without passing scope and parentPath.\",traverseVerifyRootFunction:\"You passed `traverse()` a function when it expected a visitor object, are you sure you didn't mean `{ enter: Function }`?\",traverseVerifyVisitorProperty:\"You passed `traverse()` a visitor object with the property $1 that has the invalid property $2\",traverseVerifyNodeType:\"You gave us a visitor for the node type $1 but it's not a valid type\",pluginNotObject:\"Plugin $2 specified in $1 was expected to return an object when invoked but returned $3\",pluginNotFunction:\"Plugin $2 specified in $1 was expected to return a function but returned $3\",pluginUnknown:\"Unknown plugin $1 specified in $2 at $3, attempted to resolve relative to $4\",pluginInvalidProperty:\"Plugin $2 specified in $1 provided an invalid property of $3\"};function get(key){for(var _len=arguments.length,args=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key];}var msg=MESSAGES[key];if(!msg)throw new ReferenceError(\"Unknown message \"+(0,_stringify2.default)(key));args=parseArgs(args);return msg.replace(/\\$(\\d+)/g,function(str,i){return args[i-1];});}function parseArgs(args){return args.map(function(val){if(val!=null&&val.inspect){return val.inspect();}else{try{return(0,_stringify2.default)(val)||val+\"\";}catch(e){return util.inspect(val);}}});}},{\"babel-runtime/core-js/json/stringify\":62,\"util\":602}],61:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/get-iterator\"),__esModule:true};},{\"core-js/library/fn/get-iterator\":78}],62:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/json/stringify\"),__esModule:true};},{\"core-js/library/fn/json/stringify\":79}],63:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/map\"),__esModule:true};},{\"core-js/library/fn/map\":80}],64:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/number/max-safe-integer\"),__esModule:true};},{\"core-js/library/fn/number/max-safe-integer\":81}],65:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/object/create\"),__esModule:true};},{\"core-js/library/fn/object/create\":82}],66:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/object/get-own-property-symbols\"),__esModule:true};},{\"core-js/library/fn/object/get-own-property-symbols\":83}],67:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/object/keys\"),__esModule:true};},{\"core-js/library/fn/object/keys\":84}],68:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/symbol\"),__esModule:true};},{\"core-js/library/fn/symbol\":86}],69:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/symbol/for\"),__esModule:true};},{\"core-js/library/fn/symbol/for\":85}],70:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/symbol/iterator\"),__esModule:true};},{\"core-js/library/fn/symbol/iterator\":87}],71:[function(require,module,exports){module.exports={\"default\":require(\"core-js/library/fn/weak-map\"),__esModule:true};},{\"core-js/library/fn/weak-map\":88}],72:[function(require,module,exports){\"use strict\";exports.__esModule=true;exports.default=function(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}};},{}],73:[function(require,module,exports){\"use strict\";exports.__esModule=true;var _iterator=require(\"../core-js/symbol/iterator\");var _iterator2=_interopRequireDefault(_iterator);var _symbol=require(\"../core-js/symbol\");var _symbol2=_interopRequireDefault(_symbol);var _typeof=typeof _symbol2.default===\"function\"&&(0,_typeof6.default)(_iterator2.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol2.default===\"function\"&&obj.constructor===_symbol2.default&&obj!==_symbol2.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}exports.default=typeof _symbol2.default===\"function\"&&_typeof(_iterator2.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":_typeof(obj);}:function(obj){return obj&&typeof _symbol2.default===\"function\"&&obj.constructor===_symbol2.default&&obj!==_symbol2.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":_typeof(obj);};},{\"../core-js/symbol\":68,\"../core-js/symbol/iterator\":70}],74:[function(require,module,exports){'use strict';Object.defineProperty(exports,'__esModule',{value:true});/* eslint max-len: 0 */// This is a trick taken from Esprima. It turns out that, on\n// non-Chrome browsers, to check whether a string is in a set, a\n// predicate containing a big ugly `switch` statement is faster than\n// a regular expression, and on Chrome the two are about on par.\n// This function uses `eval` (non-lexical) to produce such a\n// predicate from a space-separated string of words.\n//\n// It starts by sorting the words by length.\nfunction makePredicate(words){words=words.split(\" \");return function(str){return words.indexOf(str)>=0;};}// Reserved word lists for various dialects of the language\nvar reservedWords={6:makePredicate(\"enum await\"),strict:makePredicate(\"implements interface let package private protected public static yield\"),strictBind:makePredicate(\"eval arguments\")};// And the keywords\nvar isKeyword=makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this let const class extends export import yield super\");// ## Character categories\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point above 128.\n// Generated by `bin/generate-identifier-regex.js`.\nvar nonASCIIidentifierStartChars=\"\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\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-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\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\\u0AF9\\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-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\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-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\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\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\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\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\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\";var nonASCIIidentifierChars=\"\\u200C\\u200D\\xB7\\u0300-\\u036F\\u0387\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u0669\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u06F0-\\u06F9\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07C0-\\u07C9\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09E6-\\u09EF\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CE6-\\u0CEF\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D66-\\u0D6F\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0E50-\\u0E59\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1040-\\u1049\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u194F\\u19D0-\\u19DA\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AB0-\\u1ABD\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1C40-\\u1C49\\u1C50-\\u1C59\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA620-\\uA629\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F1\\uA900-\\uA909\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9D0-\\uA9D9\\uA9E5\\uA9F0-\\uA9F9\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA50-\\uAA59\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\";var nonASCIIidentifierStart=new RegExp(\"[\"+nonASCIIidentifierStartChars+\"]\");var nonASCIIidentifier=new RegExp(\"[\"+nonASCIIidentifierStartChars+nonASCIIidentifierChars+\"]\");nonASCIIidentifierStartChars=nonASCIIidentifierChars=null;// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `bin/generate-identifier-regex.js`.\n// eslint-disable-next-line comma-spacing\nvar astralIdentifierStartCodes=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,17,26,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,26,45,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,785,52,76,44,33,24,27,35,42,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,25,391,63,32,0,449,56,264,8,2,36,18,0,50,29,881,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,881,68,12,0,67,12,65,0,32,6124,20,754,9486,1,3071,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,10591,541];// eslint-disable-next-line comma-spacing\nvar astralIdentifierCodes=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,1306,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,52,0,13,2,49,13,10,2,4,9,83,11,7,0,161,11,6,9,7,3,57,0,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,87,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,423,9,838,7,2,7,17,9,57,21,2,13,19882,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239];// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code,set){var pos=0x10000;for(var i=0;i<set.length;i+=2){pos+=set[i];if(pos>code)return false;pos+=set[i+1];if(pos>=code)return true;}}// Test whether a given character code starts an identifier.\nfunction isIdentifierStart(code){if(code<65)return code===36;if(code<91)return true;if(code<97)return code===95;if(code<123)return true;if(code<=0xffff)return code>=0xaa&&nonASCIIidentifierStart.test(String.fromCharCode(code));return isInAstralSet(code,astralIdentifierStartCodes);}// Test whether a given character is part of an identifier.\nfunction isIdentifierChar(code){if(code<48)return code===36;if(code<58)return true;if(code<65)return false;if(code<91)return true;if(code<97)return code===95;if(code<123)return true;if(code<=0xffff)return code>=0xaa&&nonASCIIidentifier.test(String.fromCharCode(code));return isInAstralSet(code,astralIdentifierStartCodes)||isInAstralSet(code,astralIdentifierCodes);}// A second optional argument can be given to further configure\nvar defaultOptions={// Source type (\"script\" or \"module\") for different semantics\nsourceType:\"script\",// Source filename.\nsourceFilename:undefined,// Line from which to start counting source. Useful for\n// integration with other tools.\nstartLine:1,// When enabled, a return at the top level is not considered an\n// error.\nallowReturnOutsideFunction:false,// When enabled, import/export statements are not constrained to\n// appearing at the top of the program.\nallowImportExportEverywhere:false,// TODO\nallowSuperOutsideMethod:false,// An array of plugins to enable\nplugins:[],// TODO\nstrictMode:null};// Interpret and default an options object\nfunction getOptions(opts){var options={};for(var key in defaultOptions){options[key]=opts&&key in opts?opts[key]:defaultOptions[key];}return options;}var _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var classCallCheck=function classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}};var inherits=function inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;};var possibleConstructorReturn=function possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;};// ## Token types\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\nvar beforeExpr=true;var startsExpr=true;var isLoop=true;var isAssign=true;var prefix=true;var postfix=true;var TokenType=function TokenType(label){var conf=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};classCallCheck(this,TokenType);this.label=label;this.keyword=conf.keyword;this.beforeExpr=!!conf.beforeExpr;this.startsExpr=!!conf.startsExpr;this.rightAssociative=!!conf.rightAssociative;this.isLoop=!!conf.isLoop;this.isAssign=!!conf.isAssign;this.prefix=!!conf.prefix;this.postfix=!!conf.postfix;this.binop=conf.binop||null;this.updateContext=null;};var KeywordTokenType=function(_TokenType){inherits(KeywordTokenType,_TokenType);function KeywordTokenType(name){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};classCallCheck(this,KeywordTokenType);options.keyword=name;return possibleConstructorReturn(this,_TokenType.call(this,name,options));}return KeywordTokenType;}(TokenType);var BinopTokenType=function(_TokenType2){inherits(BinopTokenType,_TokenType2);function BinopTokenType(name,prec){classCallCheck(this,BinopTokenType);return possibleConstructorReturn(this,_TokenType2.call(this,name,{beforeExpr:beforeExpr,binop:prec}));}return BinopTokenType;}(TokenType);var types={num:new TokenType(\"num\",{startsExpr:startsExpr}),regexp:new TokenType(\"regexp\",{startsExpr:startsExpr}),string:new TokenType(\"string\",{startsExpr:startsExpr}),name:new TokenType(\"name\",{startsExpr:startsExpr}),eof:new TokenType(\"eof\"),// Punctuation token types.\nbracketL:new TokenType(\"[\",{beforeExpr:beforeExpr,startsExpr:startsExpr}),bracketR:new TokenType(\"]\"),braceL:new TokenType(\"{\",{beforeExpr:beforeExpr,startsExpr:startsExpr}),braceBarL:new TokenType(\"{|\",{beforeExpr:beforeExpr,startsExpr:startsExpr}),braceR:new TokenType(\"}\"),braceBarR:new TokenType(\"|}\"),parenL:new TokenType(\"(\",{beforeExpr:beforeExpr,startsExpr:startsExpr}),parenR:new TokenType(\")\"),comma:new TokenType(\",\",{beforeExpr:beforeExpr}),semi:new TokenType(\";\",{beforeExpr:beforeExpr}),colon:new TokenType(\":\",{beforeExpr:beforeExpr}),doubleColon:new TokenType(\"::\",{beforeExpr:beforeExpr}),dot:new TokenType(\".\"),question:new TokenType(\"?\",{beforeExpr:beforeExpr}),arrow:new TokenType(\"=>\",{beforeExpr:beforeExpr}),template:new TokenType(\"template\"),ellipsis:new TokenType(\"...\",{beforeExpr:beforeExpr}),backQuote:new TokenType(\"`\",{startsExpr:startsExpr}),dollarBraceL:new TokenType(\"${\",{beforeExpr:beforeExpr,startsExpr:startsExpr}),at:new TokenType(\"@\"),// Operators. These carry several kinds of properties to help the\n// parser use them properly (the presence of these properties is\n// what categorizes them as operators).\n//\n// `binop`, when present, specifies that this operator is a binary\n// operator, and will refer to its precedence.\n//\n// `prefix` and `postfix` mark the operator as a prefix or postfix\n// unary operator.\n//\n// `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n// binary operators with a very low precedence, that should result\n// in AssignmentExpression nodes.\neq:new TokenType(\"=\",{beforeExpr:beforeExpr,isAssign:isAssign}),assign:new TokenType(\"_=\",{beforeExpr:beforeExpr,isAssign:isAssign}),incDec:new TokenType(\"++/--\",{prefix:prefix,postfix:postfix,startsExpr:startsExpr}),prefix:new TokenType(\"prefix\",{beforeExpr:beforeExpr,prefix:prefix,startsExpr:startsExpr}),logicalOR:new BinopTokenType(\"||\",1),logicalAND:new BinopTokenType(\"&&\",2),bitwiseOR:new BinopTokenType(\"|\",3),bitwiseXOR:new BinopTokenType(\"^\",4),bitwiseAND:new BinopTokenType(\"&\",5),equality:new BinopTokenType(\"==/!=\",6),relational:new BinopTokenType(\"</>\",7),bitShift:new BinopTokenType(\"<</>>\",8),plusMin:new TokenType(\"+/-\",{beforeExpr:beforeExpr,binop:9,prefix:prefix,startsExpr:startsExpr}),modulo:new BinopTokenType(\"%\",10),star:new BinopTokenType(\"*\",10),slash:new BinopTokenType(\"/\",10),exponent:new TokenType(\"**\",{beforeExpr:beforeExpr,binop:11,rightAssociative:true})};var keywords={\"break\":new KeywordTokenType(\"break\"),\"case\":new KeywordTokenType(\"case\",{beforeExpr:beforeExpr}),\"catch\":new KeywordTokenType(\"catch\"),\"continue\":new KeywordTokenType(\"continue\"),\"debugger\":new KeywordTokenType(\"debugger\"),\"default\":new KeywordTokenType(\"default\",{beforeExpr:beforeExpr}),\"do\":new KeywordTokenType(\"do\",{isLoop:isLoop,beforeExpr:beforeExpr}),\"else\":new KeywordTokenType(\"else\",{beforeExpr:beforeExpr}),\"finally\":new KeywordTokenType(\"finally\"),\"for\":new KeywordTokenType(\"for\",{isLoop:isLoop}),\"function\":new KeywordTokenType(\"function\",{startsExpr:startsExpr}),\"if\":new KeywordTokenType(\"if\"),\"return\":new KeywordTokenType(\"return\",{beforeExpr:beforeExpr}),\"switch\":new KeywordTokenType(\"switch\"),\"throw\":new KeywordTokenType(\"throw\",{beforeExpr:beforeExpr}),\"try\":new KeywordTokenType(\"try\"),\"var\":new KeywordTokenType(\"var\"),\"let\":new KeywordTokenType(\"let\"),\"const\":new KeywordTokenType(\"const\"),\"while\":new KeywordTokenType(\"while\",{isLoop:isLoop}),\"with\":new KeywordTokenType(\"with\"),\"new\":new KeywordTokenType(\"new\",{beforeExpr:beforeExpr,startsExpr:startsExpr}),\"this\":new KeywordTokenType(\"this\",{startsExpr:startsExpr}),\"super\":new KeywordTokenType(\"super\",{startsExpr:startsExpr}),\"class\":new KeywordTokenType(\"class\"),\"extends\":new KeywordTokenType(\"extends\",{beforeExpr:beforeExpr}),\"export\":new KeywordTokenType(\"export\"),\"import\":new KeywordTokenType(\"import\"),\"yield\":new KeywordTokenType(\"yield\",{beforeExpr:beforeExpr,startsExpr:startsExpr}),\"null\":new KeywordTokenType(\"null\",{startsExpr:startsExpr}),\"true\":new KeywordTokenType(\"true\",{startsExpr:startsExpr}),\"false\":new KeywordTokenType(\"false\",{startsExpr:startsExpr}),\"in\":new KeywordTokenType(\"in\",{beforeExpr:beforeExpr,binop:7}),\"instanceof\":new KeywordTokenType(\"instanceof\",{beforeExpr:beforeExpr,binop:7}),\"typeof\":new KeywordTokenType(\"typeof\",{beforeExpr:beforeExpr,prefix:prefix,startsExpr:startsExpr}),\"void\":new KeywordTokenType(\"void\",{beforeExpr:beforeExpr,prefix:prefix,startsExpr:startsExpr}),\"delete\":new KeywordTokenType(\"delete\",{beforeExpr:beforeExpr,prefix:prefix,startsExpr:startsExpr})};// Map keyword names to token types.\n(0,_keys4.default)(keywords).forEach(function(name){types[\"_\"+name]=keywords[name];});// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nvar lineBreak=/\\r\\n?|\\n|\\u2028|\\u2029/;var lineBreakG=new RegExp(lineBreak.source,\"g\");function isNewLine(code){return code===10||code===13||code===0x2028||code===0x2029;}var nonASCIIwhitespace=/[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\nvar TokContext=function TokContext(token,isExpr,preserveSpace,override){classCallCheck(this,TokContext);this.token=token;this.isExpr=!!isExpr;this.preserveSpace=!!preserveSpace;this.override=override;};var types$1={braceStatement:new TokContext(\"{\",false),braceExpression:new TokContext(\"{\",true),templateQuasi:new TokContext(\"${\",true),parenStatement:new TokContext(\"(\",false),parenExpression:new TokContext(\"(\",true),template:new TokContext(\"`\",true,true,function(p){return p.readTmplToken();}),functionExpression:new TokContext(\"function\",true)};// Token-specific context update code\ntypes.parenR.updateContext=types.braceR.updateContext=function(){if(this.state.context.length===1){this.state.exprAllowed=true;return;}var out=this.state.context.pop();if(out===types$1.braceStatement&&this.curContext()===types$1.functionExpression){this.state.context.pop();this.state.exprAllowed=false;}else if(out===types$1.templateQuasi){this.state.exprAllowed=true;}else{this.state.exprAllowed=!out.isExpr;}};types.name.updateContext=function(prevType){this.state.exprAllowed=false;if(prevType===types._let||prevType===types._const||prevType===types._var){if(lineBreak.test(this.input.slice(this.state.end))){this.state.exprAllowed=true;}}};types.braceL.updateContext=function(prevType){this.state.context.push(this.braceIsBlock(prevType)?types$1.braceStatement:types$1.braceExpression);this.state.exprAllowed=true;};types.dollarBraceL.updateContext=function(){this.state.context.push(types$1.templateQuasi);this.state.exprAllowed=true;};types.parenL.updateContext=function(prevType){var statementParens=prevType===types._if||prevType===types._for||prevType===types._with||prevType===types._while;this.state.context.push(statementParens?types$1.parenStatement:types$1.parenExpression);this.state.exprAllowed=true;};types.incDec.updateContext=function(){// tokExprAllowed stays unchanged\n};types._function.updateContext=function(){if(this.curContext()!==types$1.braceStatement){this.state.context.push(types$1.functionExpression);}this.state.exprAllowed=false;};types.backQuote.updateContext=function(){if(this.curContext()===types$1.template){this.state.context.pop();}else{this.state.context.push(types$1.template);}this.state.exprAllowed=false;};// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\nvar Position=function Position(line,col){classCallCheck(this,Position);this.line=line;this.column=col;};var SourceLocation=function SourceLocation(start,end){classCallCheck(this,SourceLocation);this.start=start;this.end=end;};// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\nfunction getLineInfo(input,offset){for(var line=1,cur=0;;){lineBreakG.lastIndex=cur;var match=lineBreakG.exec(input);if(match&&match.index<offset){++line;cur=match.index+match[0].length;}else{return new Position(line,offset-cur);}}}var State=function(){function State(){classCallCheck(this,State);}State.prototype.init=function init(options,input){this.strict=options.strictMode===false?false:options.sourceType===\"module\";this.input=input;this.potentialArrowAt=-1;this.inMethod=this.inFunction=this.inGenerator=this.inAsync=this.inPropertyName=this.inType=this.noAnonFunctionType=false;this.labels=[];this.decorators=[];this.tokens=[];this.comments=[];this.trailingComments=[];this.leadingComments=[];this.commentStack=[];this.pos=this.lineStart=0;this.curLine=options.startLine;this.type=types.eof;this.value=null;this.start=this.end=this.pos;this.startLoc=this.endLoc=this.curPosition();this.lastTokEndLoc=this.lastTokStartLoc=null;this.lastTokStart=this.lastTokEnd=this.pos;this.context=[types$1.braceStatement];this.exprAllowed=true;this.containsEsc=this.containsOctal=false;this.octalPosition=null;this.exportedIdentifiers=[];return this;};// TODO\n// TODO\n// Used to signify the start of a potential arrow function\n// Flags to track whether we are in a function, a generator.\n// Labels in scope.\n// Leading decorators.\n// Token store.\n// Comment store.\n// Comment attachment store\n// The current position of the tokenizer in the input.\n// Properties of the current token:\n// Its type\n// For tokens that include more information than their type, the value\n// Its start and end offset\n// And, if locations are used, the {line, column} object\n// corresponding to those offsets\n// Position information for the previous token\n// The context stack is used to superficially track syntactic\n// context to predict whether a regular expression is allowed in a\n// given position.\n// Used to signal to callers of `readWord1` whether the word\n// contained any escape sequences. This is needed because words with\n// escape sequences must not be interpreted as keywords.\n// TODO\n// Names of exports store. `default` is stored as a name for both\n// `export default foo;` and `export { foo as default };`.\nState.prototype.curPosition=function curPosition(){return new Position(this.curLine,this.pos-this.lineStart);};State.prototype.clone=function clone(skipArrays){var state=new State();for(var key in this){var val=this[key];if((!skipArrays||key===\"context\")&&Array.isArray(val)){val=val.slice();}state[key]=val;}return state;};return State;}();// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\nvar Token=function Token(state){classCallCheck(this,Token);this.type=state.type;this.value=state.value;this.start=state.start;this.end=state.end;this.loc=new SourceLocation(state.startLoc,state.endLoc);};// ## Tokenizer\nfunction codePointToString(code){// UTF-16 Decoding\nif(code<=0xFFFF){return String.fromCharCode(code);}else{return String.fromCharCode((code-0x10000>>10)+0xD800,(code-0x10000&1023)+0xDC00);}}var Tokenizer=function(){function Tokenizer(options,input){classCallCheck(this,Tokenizer);this.state=new State();this.state.init(options,input);}// Move to the next token\nTokenizer.prototype.next=function next(){if(!this.isLookahead){this.state.tokens.push(new Token(this.state));}this.state.lastTokEnd=this.state.end;this.state.lastTokStart=this.state.start;this.state.lastTokEndLoc=this.state.endLoc;this.state.lastTokStartLoc=this.state.startLoc;this.nextToken();};// TODO\nTokenizer.prototype.eat=function eat(type){if(this.match(type)){this.next();return true;}else{return false;}};// TODO\nTokenizer.prototype.match=function match(type){return this.state.type===type;};// TODO\nTokenizer.prototype.isKeyword=function isKeyword$$1(word){return isKeyword(word);};// TODO\nTokenizer.prototype.lookahead=function lookahead(){var old=this.state;this.state=old.clone(true);this.isLookahead=true;this.next();this.isLookahead=false;var curr=this.state.clone(true);this.state=old;return curr;};// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\nTokenizer.prototype.setStrict=function setStrict(strict){this.state.strict=strict;if(!this.match(types.num)&&!this.match(types.string))return;this.state.pos=this.state.start;while(this.state.pos<this.state.lineStart){this.state.lineStart=this.input.lastIndexOf(\"\\n\",this.state.lineStart-2)+1;--this.state.curLine;}this.nextToken();};Tokenizer.prototype.curContext=function curContext(){return this.state.context[this.state.context.length-1];};// Read a single token, updating the parser object's token-related\n// properties.\nTokenizer.prototype.nextToken=function nextToken(){var curContext=this.curContext();if(!curContext||!curContext.preserveSpace)this.skipSpace();this.state.containsOctal=false;this.state.octalPosition=null;this.state.start=this.state.pos;this.state.startLoc=this.state.curPosition();if(this.state.pos>=this.input.length)return this.finishToken(types.eof);if(curContext.override){return curContext.override(this);}else{return this.readToken(this.fullCharCodeAtPos());}};Tokenizer.prototype.readToken=function readToken(code){// Identifier or keyword. '\\uXXXX' sequences are allowed in\n// identifiers, so '\\' also dispatches to that.\nif(isIdentifierStart(code)||code===92/* '\\' */){return this.readWord();}else{return this.getTokenFromCode(code);}};Tokenizer.prototype.fullCharCodeAtPos=function fullCharCodeAtPos(){var code=this.input.charCodeAt(this.state.pos);if(code<=0xd7ff||code>=0xe000)return code;var next=this.input.charCodeAt(this.state.pos+1);return(code<<10)+next-0x35fdc00;};Tokenizer.prototype.pushComment=function pushComment(block,text,start,end,startLoc,endLoc){var comment={type:block?\"CommentBlock\":\"CommentLine\",value:text,start:start,end:end,loc:new SourceLocation(startLoc,endLoc)};if(!this.isLookahead){this.state.tokens.push(comment);this.state.comments.push(comment);this.addComment(comment);}};Tokenizer.prototype.skipBlockComment=function skipBlockComment(){var startLoc=this.state.curPosition();var start=this.state.pos;var end=this.input.indexOf(\"*/\",this.state.pos+=2);if(end===-1)this.raise(this.state.pos-2,\"Unterminated comment\");this.state.pos=end+2;lineBreakG.lastIndex=start;var match=void 0;while((match=lineBreakG.exec(this.input))&&match.index<this.state.pos){++this.state.curLine;this.state.lineStart=match.index+match[0].length;}this.pushComment(true,this.input.slice(start+2,end),start,this.state.pos,startLoc,this.state.curPosition());};Tokenizer.prototype.skipLineComment=function skipLineComment(startSkip){var start=this.state.pos;var startLoc=this.state.curPosition();var ch=this.input.charCodeAt(this.state.pos+=startSkip);while(this.state.pos<this.input.length&&ch!==10&&ch!==13&&ch!==8232&&ch!==8233){++this.state.pos;ch=this.input.charCodeAt(this.state.pos);}this.pushComment(false,this.input.slice(start+startSkip,this.state.pos),start,this.state.pos,startLoc,this.state.curPosition());};// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\nTokenizer.prototype.skipSpace=function skipSpace(){loop:while(this.state.pos<this.input.length){var ch=this.input.charCodeAt(this.state.pos);switch(ch){case 32:case 160:// ' '\n++this.state.pos;break;case 13:if(this.input.charCodeAt(this.state.pos+1)===10){++this.state.pos;}case 10:case 8232:case 8233:++this.state.pos;++this.state.curLine;this.state.lineStart=this.state.pos;break;case 47:// '/'\nswitch(this.input.charCodeAt(this.state.pos+1)){case 42:// '*'\nthis.skipBlockComment();break;case 47:this.skipLineComment(2);break;default:break loop;}break;default:if(ch>8&&ch<14||ch>=5760&&nonASCIIwhitespace.test(String.fromCharCode(ch))){++this.state.pos;}else{break loop;}}}};// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\nTokenizer.prototype.finishToken=function finishToken(type,val){this.state.end=this.state.pos;this.state.endLoc=this.state.curPosition();var prevType=this.state.type;this.state.type=type;this.state.value=val;this.updateContext(prevType);};// ### Token reading\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\nTokenizer.prototype.readToken_dot=function readToken_dot(){var next=this.input.charCodeAt(this.state.pos+1);if(next>=48&&next<=57){return this.readNumber(true);}var next2=this.input.charCodeAt(this.state.pos+2);if(next===46&&next2===46){// 46 = dot '.'\nthis.state.pos+=3;return this.finishToken(types.ellipsis);}else{++this.state.pos;return this.finishToken(types.dot);}};Tokenizer.prototype.readToken_slash=function readToken_slash(){// '/'\nif(this.state.exprAllowed){++this.state.pos;return this.readRegexp();}var next=this.input.charCodeAt(this.state.pos+1);if(next===61){return this.finishOp(types.assign,2);}else{return this.finishOp(types.slash,1);}};Tokenizer.prototype.readToken_mult_modulo=function readToken_mult_modulo(code){// '%*'\nvar type=code===42?types.star:types.modulo;var width=1;var next=this.input.charCodeAt(this.state.pos+1);if(next===42){// '*'\nwidth++;next=this.input.charCodeAt(this.state.pos+2);type=types.exponent;}if(next===61){width++;type=types.assign;}return this.finishOp(type,width);};Tokenizer.prototype.readToken_pipe_amp=function readToken_pipe_amp(code){// '|&'\nvar next=this.input.charCodeAt(this.state.pos+1);if(next===code)return this.finishOp(code===124?types.logicalOR:types.logicalAND,2);if(next===61)return this.finishOp(types.assign,2);if(code===124&&next===125&&this.hasPlugin(\"flow\"))return this.finishOp(types.braceBarR,2);return this.finishOp(code===124?types.bitwiseOR:types.bitwiseAND,1);};Tokenizer.prototype.readToken_caret=function readToken_caret(){// '^'\nvar next=this.input.charCodeAt(this.state.pos+1);if(next===61){return this.finishOp(types.assign,2);}else{return this.finishOp(types.bitwiseXOR,1);}};Tokenizer.prototype.readToken_plus_min=function readToken_plus_min(code){// '+-'\nvar next=this.input.charCodeAt(this.state.pos+1);if(next===code){if(next===45&&this.input.charCodeAt(this.state.pos+2)===62&&lineBreak.test(this.input.slice(this.state.lastTokEnd,this.state.pos))){// A `-->` line comment\nthis.skipLineComment(3);this.skipSpace();return this.nextToken();}return this.finishOp(types.incDec,2);}if(next===61){return this.finishOp(types.assign,2);}else{return this.finishOp(types.plusMin,1);}};Tokenizer.prototype.readToken_lt_gt=function readToken_lt_gt(code){// '<>'\nvar next=this.input.charCodeAt(this.state.pos+1);var size=1;if(next===code){size=code===62&&this.input.charCodeAt(this.state.pos+2)===62?3:2;if(this.input.charCodeAt(this.state.pos+size)===61)return this.finishOp(types.assign,size+1);return this.finishOp(types.bitShift,size);}if(next===33&&code===60&&this.input.charCodeAt(this.state.pos+2)===45&&this.input.charCodeAt(this.state.pos+3)===45){if(this.inModule)this.unexpected();// `<!--`, an XML-style comment that should be interpreted as a line comment\nthis.skipLineComment(4);this.skipSpace();return this.nextToken();}if(next===61){// <= | >=\nsize=2;}return this.finishOp(types.relational,size);};Tokenizer.prototype.readToken_eq_excl=function readToken_eq_excl(code){// '=!'\nvar next=this.input.charCodeAt(this.state.pos+1);if(next===61)return this.finishOp(types.equality,this.input.charCodeAt(this.state.pos+2)===61?3:2);if(code===61&&next===62){// '=>'\nthis.state.pos+=2;return this.finishToken(types.arrow);}return this.finishOp(code===61?types.eq:types.prefix,1);};Tokenizer.prototype.getTokenFromCode=function getTokenFromCode(code){switch(code){// The interpretation of a dot depends on whether it is followed\n// by a digit or another two dots.\ncase 46:// '.'\nreturn this.readToken_dot();// Punctuation tokens.\ncase 40:++this.state.pos;return this.finishToken(types.parenL);case 41:++this.state.pos;return this.finishToken(types.parenR);case 59:++this.state.pos;return this.finishToken(types.semi);case 44:++this.state.pos;return this.finishToken(types.comma);case 91:++this.state.pos;return this.finishToken(types.bracketL);case 93:++this.state.pos;return this.finishToken(types.bracketR);case 123:if(this.hasPlugin(\"flow\")&&this.input.charCodeAt(this.state.pos+1)===124){return this.finishOp(types.braceBarL,2);}else{++this.state.pos;return this.finishToken(types.braceL);}case 125:++this.state.pos;return this.finishToken(types.braceR);case 58:if(this.hasPlugin(\"functionBind\")&&this.input.charCodeAt(this.state.pos+1)===58){return this.finishOp(types.doubleColon,2);}else{++this.state.pos;return this.finishToken(types.colon);}case 63:++this.state.pos;return this.finishToken(types.question);case 64:++this.state.pos;return this.finishToken(types.at);case 96:// '`'\n++this.state.pos;return this.finishToken(types.backQuote);case 48:// '0'\nvar next=this.input.charCodeAt(this.state.pos+1);if(next===120||next===88)return this.readRadixNumber(16);// '0x', '0X' - hex number\nif(next===111||next===79)return this.readRadixNumber(8);// '0o', '0O' - octal number\nif(next===98||next===66)return this.readRadixNumber(2);// '0b', '0B' - binary number\n// Anything else beginning with a digit is an integer, octal\n// number, or float.\ncase 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:// 1-9\nreturn this.readNumber(false);// Quotes produce strings.\ncase 34:case 39:// '\"', \"'\"\nreturn this.readString(code);// Operators are parsed inline in tiny state machines. '=' (61) is\n// often referred to. `finishOp` simply skips the amount of\n// characters it is given as second argument, and returns a token\n// of the type given by its first argument.\ncase 47:// '/'\nreturn this.readToken_slash();case 37:case 42:// '%*'\nreturn this.readToken_mult_modulo(code);case 124:case 38:// '|&'\nreturn this.readToken_pipe_amp(code);case 94:// '^'\nreturn this.readToken_caret();case 43:case 45:// '+-'\nreturn this.readToken_plus_min(code);case 60:case 62:// '<>'\nreturn this.readToken_lt_gt(code);case 61:case 33:// '=!'\nreturn this.readToken_eq_excl(code);case 126:// '~'\nreturn this.finishOp(types.prefix,1);}this.raise(this.state.pos,\"Unexpected character '\"+codePointToString(code)+\"'\");};Tokenizer.prototype.finishOp=function finishOp(type,size){var str=this.input.slice(this.state.pos,this.state.pos+size);this.state.pos+=size;return this.finishToken(type,str);};Tokenizer.prototype.readRegexp=function readRegexp(){var start=this.state.pos;var escaped=void 0,inClass=void 0;for(;;){if(this.state.pos>=this.input.length)this.raise(start,\"Unterminated regular expression\");var ch=this.input.charAt(this.state.pos);if(lineBreak.test(ch)){this.raise(start,\"Unterminated regular expression\");}if(escaped){escaped=false;}else{if(ch===\"[\"){inClass=true;}else if(ch===\"]\"&&inClass){inClass=false;}else if(ch===\"/\"&&!inClass){break;}escaped=ch===\"\\\\\";}++this.state.pos;}var content=this.input.slice(start,this.state.pos);++this.state.pos;// Need to use `readWord1` because '\\uXXXX' sequences are allowed\n// here (don't ask).\nvar mods=this.readWord1();if(mods){var validFlags=/^[gmsiyu]*$/;if(!validFlags.test(mods))this.raise(start,\"Invalid regular expression flag\");}return this.finishToken(types.regexp,{pattern:content,flags:mods});};// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\nTokenizer.prototype.readInt=function readInt(radix,len){var start=this.state.pos;var total=0;for(var i=0,e=len==null?Infinity:len;i<e;++i){var code=this.input.charCodeAt(this.state.pos);var val=void 0;if(code>=97){val=code-97+10;// a\n}else if(code>=65){val=code-65+10;// A\n}else if(code>=48&&code<=57){val=code-48;// 0-9\n}else{val=Infinity;}if(val>=radix)break;++this.state.pos;total=total*radix+val;}if(this.state.pos===start||len!=null&&this.state.pos-start!==len)return null;return total;};Tokenizer.prototype.readRadixNumber=function readRadixNumber(radix){this.state.pos+=2;// 0x\nvar val=this.readInt(radix);if(val==null)this.raise(this.state.start+2,\"Expected number in radix \"+radix);if(isIdentifierStart(this.fullCharCodeAtPos()))this.raise(this.state.pos,\"Identifier directly after number\");return this.finishToken(types.num,val);};// Read an integer, octal integer, or floating-point number.\nTokenizer.prototype.readNumber=function readNumber(startsWithDot){var start=this.state.pos;var octal=this.input.charCodeAt(this.state.pos)===48;var isFloat=false;if(!startsWithDot&&this.readInt(10)===null)this.raise(start,\"Invalid number\");var next=this.input.charCodeAt(this.state.pos);if(next===46){// '.'\n++this.state.pos;this.readInt(10);isFloat=true;next=this.input.charCodeAt(this.state.pos);}if(next===69||next===101){// 'eE'\nnext=this.input.charCodeAt(++this.state.pos);if(next===43||next===45)++this.state.pos;// '+-'\nif(this.readInt(10)===null)this.raise(start,\"Invalid number\");isFloat=true;}if(isIdentifierStart(this.fullCharCodeAtPos()))this.raise(this.state.pos,\"Identifier directly after number\");var str=this.input.slice(start,this.state.pos);var val=void 0;if(isFloat){val=parseFloat(str);}else if(!octal||str.length===1){val=parseInt(str,10);}else if(/[89]/.test(str)||this.state.strict){this.raise(start,\"Invalid number\");}else{val=parseInt(str,8);}return this.finishToken(types.num,val);};// Read a string value, interpreting backslash-escapes.\nTokenizer.prototype.readCodePoint=function readCodePoint(){var ch=this.input.charCodeAt(this.state.pos);var code=void 0;if(ch===123){var codePos=++this.state.pos;code=this.readHexChar(this.input.indexOf(\"}\",this.state.pos)-this.state.pos);++this.state.pos;if(code>0x10FFFF)this.raise(codePos,\"Code point out of bounds\");}else{code=this.readHexChar(4);}return code;};Tokenizer.prototype.readString=function readString(quote){var out=\"\",chunkStart=++this.state.pos;for(;;){if(this.state.pos>=this.input.length)this.raise(this.state.start,\"Unterminated string constant\");var ch=this.input.charCodeAt(this.state.pos);if(ch===quote)break;if(ch===92){// '\\'\nout+=this.input.slice(chunkStart,this.state.pos);out+=this.readEscapedChar(false);chunkStart=this.state.pos;}else{if(isNewLine(ch))this.raise(this.state.start,\"Unterminated string constant\");++this.state.pos;}}out+=this.input.slice(chunkStart,this.state.pos++);return this.finishToken(types.string,out);};// Reads template string tokens.\nTokenizer.prototype.readTmplToken=function readTmplToken(){var out=\"\",chunkStart=this.state.pos;for(;;){if(this.state.pos>=this.input.length)this.raise(this.state.start,\"Unterminated template\");var ch=this.input.charCodeAt(this.state.pos);if(ch===96||ch===36&&this.input.charCodeAt(this.state.pos+1)===123){// '`', '${'\nif(this.state.pos===this.state.start&&this.match(types.template)){if(ch===36){this.state.pos+=2;return this.finishToken(types.dollarBraceL);}else{++this.state.pos;return this.finishToken(types.backQuote);}}out+=this.input.slice(chunkStart,this.state.pos);return this.finishToken(types.template,out);}if(ch===92){// '\\'\nout+=this.input.slice(chunkStart,this.state.pos);out+=this.readEscapedChar(true);chunkStart=this.state.pos;}else if(isNewLine(ch)){out+=this.input.slice(chunkStart,this.state.pos);++this.state.pos;switch(ch){case 13:if(this.input.charCodeAt(this.state.pos)===10)++this.state.pos;case 10:out+=\"\\n\";break;default:out+=String.fromCharCode(ch);break;}++this.state.curLine;this.state.lineStart=this.state.pos;chunkStart=this.state.pos;}else{++this.state.pos;}}};// Used to read escaped characters\nTokenizer.prototype.readEscapedChar=function readEscapedChar(inTemplate){var ch=this.input.charCodeAt(++this.state.pos);++this.state.pos;switch(ch){case 110:return\"\\n\";// 'n' -> '\\n'\ncase 114:return\"\\r\";// 'r' -> '\\r'\ncase 120:return String.fromCharCode(this.readHexChar(2));// 'x'\ncase 117:return codePointToString(this.readCodePoint());// 'u'\ncase 116:return\"\\t\";// 't' -> '\\t'\ncase 98:return\"\\b\";// 'b' -> '\\b'\ncase 118:return\"\\x0B\";// 'v' -> '\\u000b'\ncase 102:return\"\\f\";// 'f' -> '\\f'\ncase 13:if(this.input.charCodeAt(this.state.pos)===10)++this.state.pos;// '\\r\\n'\ncase 10:// ' \\n'\nthis.state.lineStart=this.state.pos;++this.state.curLine;return\"\";default:if(ch>=48&&ch<=55){var octalStr=this.input.substr(this.state.pos-1,3).match(/^[0-7]+/)[0];var octal=parseInt(octalStr,8);if(octal>255){octalStr=octalStr.slice(0,-1);octal=parseInt(octalStr,8);}if(octal>0){if(!this.state.containsOctal){this.state.containsOctal=true;this.state.octalPosition=this.state.pos-2;}if(this.state.strict||inTemplate){this.raise(this.state.pos-2,\"Octal literal in strict mode\");}}this.state.pos+=octalStr.length-1;return String.fromCharCode(octal);}return String.fromCharCode(ch);}};// Used to read character escape sequences ('\\x', '\\u', '\\U').\nTokenizer.prototype.readHexChar=function readHexChar(len){var codePos=this.state.pos;var n=this.readInt(16,len);if(n===null)this.raise(codePos,\"Bad character escape sequence\");return n;};// Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\nTokenizer.prototype.readWord1=function readWord1(){this.state.containsEsc=false;var word=\"\",first=true,chunkStart=this.state.pos;while(this.state.pos<this.input.length){var ch=this.fullCharCodeAtPos();if(isIdentifierChar(ch)){this.state.pos+=ch<=0xffff?1:2;}else if(ch===92){// \"\\\"\nthis.state.containsEsc=true;word+=this.input.slice(chunkStart,this.state.pos);var escStart=this.state.pos;if(this.input.charCodeAt(++this.state.pos)!==117){// \"u\"\nthis.raise(this.state.pos,\"Expecting Unicode escape sequence \\\\uXXXX\");}++this.state.pos;var esc=this.readCodePoint();if(!(first?isIdentifierStart:isIdentifierChar)(esc,true)){this.raise(escStart,\"Invalid Unicode escape\");}word+=codePointToString(esc);chunkStart=this.state.pos;}else{break;}first=false;}return word+this.input.slice(chunkStart,this.state.pos);};// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\nTokenizer.prototype.readWord=function readWord(){var word=this.readWord1();var type=types.name;if(!this.state.containsEsc&&this.isKeyword(word)){type=keywords[word];}return this.finishToken(type,word);};Tokenizer.prototype.braceIsBlock=function braceIsBlock(prevType){if(prevType===types.colon){var parent=this.curContext();if(parent===types$1.braceStatement||parent===types$1.braceExpression){return!parent.isExpr;}}if(prevType===types._return){return lineBreak.test(this.input.slice(this.state.lastTokEnd,this.state.start));}if(prevType===types._else||prevType===types.semi||prevType===types.eof||prevType===types.parenR){return true;}if(prevType===types.braceL){return this.curContext()===types$1.braceStatement;}return!this.state.exprAllowed;};Tokenizer.prototype.updateContext=function updateContext(prevType){var type=this.state.type;var update=void 0;if(type.keyword&&prevType===types.dot){this.state.exprAllowed=false;}else if(update=type.updateContext){update.call(this,prevType);}else{this.state.exprAllowed=type.beforeExpr;}};return Tokenizer;}();var plugins={};var frozenDeprecatedWildcardPluginList=[\"jsx\",\"doExpressions\",\"objectRestSpread\",\"decorators\",\"classProperties\",\"exportExtensions\",\"asyncGenerators\",\"functionBind\",\"functionSent\",\"dynamicImport\",\"flow\"];var Parser=function(_Tokenizer){inherits(Parser,_Tokenizer);function Parser(options,input){classCallCheck(this,Parser);options=getOptions(options);var _this=possibleConstructorReturn(this,_Tokenizer.call(this,options,input));_this.options=options;_this.inModule=_this.options.sourceType===\"module\";_this.input=input;_this.plugins=_this.loadPlugins(_this.options.plugins);_this.filename=options.sourceFilename;// If enabled, skip leading hashbang line.\nif(_this.state.pos===0&&_this.input[0]===\"#\"&&_this.input[1]===\"!\"){_this.skipLineComment(2);}return _this;}Parser.prototype.isReservedWord=function isReservedWord(word){if(word===\"await\"){return this.inModule;}else{return reservedWords[6](word);}};Parser.prototype.hasPlugin=function hasPlugin(name){if(this.plugins[\"*\"]&&frozenDeprecatedWildcardPluginList.indexOf(name)>-1){return true;}return!!this.plugins[name];};Parser.prototype.extend=function extend(name,f){this[name]=f(this[name]);};Parser.prototype.loadAllPlugins=function loadAllPlugins(){var _this2=this;// ensure flow plugin loads last, also ensure estree is not loaded with *\nvar pluginNames=(0,_keys4.default)(plugins).filter(function(name){return name!==\"flow\"&&name!==\"estree\";});pluginNames.push(\"flow\");pluginNames.forEach(function(name){var plugin=plugins[name];if(plugin)plugin(_this2);});};Parser.prototype.loadPlugins=function loadPlugins(pluginList){// TODO: Deprecate \"*\" option in next major version of Babylon\nif(pluginList.indexOf(\"*\")>=0){this.loadAllPlugins();return{\"*\":true};}var pluginMap={};if(pluginList.indexOf(\"flow\")>=0){// ensure flow plugin loads last\npluginList=pluginList.filter(function(plugin){return plugin!==\"flow\";});pluginList.push(\"flow\");}if(pluginList.indexOf(\"estree\")>=0){// ensure estree plugin loads first\npluginList=pluginList.filter(function(plugin){return plugin!==\"estree\";});pluginList.unshift(\"estree\");}for(var _iterator=pluginList,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator5.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var name=_ref;if(!pluginMap[name]){pluginMap[name]=true;var plugin=plugins[name];if(plugin)plugin(this);}}return pluginMap;};Parser.prototype.parse=function parse(){var file=this.startNode();var program=this.startNode();this.nextToken();return this.parseTopLevel(file,program);};return Parser;}(Tokenizer);var pp=Parser.prototype;// ## Parser utilities\n// TODO\npp.addExtra=function(node,key,val){if(!node)return;var extra=node.extra=node.extra||{};extra[key]=val;};// TODO\npp.isRelational=function(op){return this.match(types.relational)&&this.state.value===op;};// TODO\npp.expectRelational=function(op){if(this.isRelational(op)){this.next();}else{this.unexpected(null,types.relational);}};// Tests whether parsed token is a contextual keyword.\npp.isContextual=function(name){return this.match(types.name)&&this.state.value===name;};// Consumes contextual keyword if possible.\npp.eatContextual=function(name){return this.state.value===name&&this.eat(types.name);};// Asserts that following token is given contextual keyword.\npp.expectContextual=function(name,message){if(!this.eatContextual(name))this.unexpected(null,message);};// Test whether a semicolon can be inserted at the current position.\npp.canInsertSemicolon=function(){return this.match(types.eof)||this.match(types.braceR)||lineBreak.test(this.input.slice(this.state.lastTokEnd,this.state.start));};// TODO\npp.isLineTerminator=function(){return this.eat(types.semi)||this.canInsertSemicolon();};// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\npp.semicolon=function(){if(!this.isLineTerminator())this.unexpected(null,types.semi);};// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error at given pos.\npp.expect=function(type,pos){return this.eat(type)||this.unexpected(pos,type);};// Raise an unexpected token error. Can take the expected token type\n// instead of a message string.\npp.unexpected=function(pos){var messageOrType=arguments.length>1&&arguments[1]!==undefined?arguments[1]:\"Unexpected token\";if(messageOrType&&(typeof messageOrType===\"undefined\"?\"undefined\":_typeof(messageOrType))===\"object\"&&messageOrType.label){messageOrType=\"Unexpected token, expected \"+messageOrType.label;}this.raise(pos!=null?pos:this.state.start,messageOrType);};/* eslint max-len: 0 */var pp$1=Parser.prototype;// ### Statement parsing\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node.  Optionally takes a\n// `program` argument.  If present, the statements will be appended\n// to its body instead of creating a new node.\npp$1.parseTopLevel=function(file,program){program.sourceType=this.options.sourceType;this.parseBlockBody(program,true,true,types.eof);file.program=this.finishNode(program,\"Program\");file.comments=this.state.comments;file.tokens=this.state.tokens;return this.finishNode(file,\"File\");};var loopLabel={kind:\"loop\"};var switchLabel={kind:\"switch\"};// TODO\npp$1.stmtToDirective=function(stmt){var expr=stmt.expression;var directiveLiteral=this.startNodeAt(expr.start,expr.loc.start);var directive=this.startNodeAt(stmt.start,stmt.loc.start);var raw=this.input.slice(expr.start,expr.end);var val=directiveLiteral.value=raw.slice(1,-1);// remove quotes\nthis.addExtra(directiveLiteral,\"raw\",raw);this.addExtra(directiveLiteral,\"rawValue\",val);directive.value=this.finishNodeAt(directiveLiteral,\"DirectiveLiteral\",expr.end,expr.loc.end);return this.finishNodeAt(directive,\"Directive\",stmt.end,stmt.loc.end);};// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\npp$1.parseStatement=function(declaration,topLevel){if(this.match(types.at)){this.parseDecorators(true);}var starttype=this.state.type;var node=this.startNode();// Most types of statements are recognized by the keyword they\n// start with. Many are trivial to parse, some require a bit of\n// complexity.\nswitch(starttype){case types._break:case types._continue:return this.parseBreakContinueStatement(node,starttype.keyword);case types._debugger:return this.parseDebuggerStatement(node);case types._do:return this.parseDoStatement(node);case types._for:return this.parseForStatement(node);case types._function:if(!declaration)this.unexpected();return this.parseFunctionStatement(node);case types._class:if(!declaration)this.unexpected();return this.parseClass(node,true);case types._if:return this.parseIfStatement(node);case types._return:return this.parseReturnStatement(node);case types._switch:return this.parseSwitchStatement(node);case types._throw:return this.parseThrowStatement(node);case types._try:return this.parseTryStatement(node);case types._let:case types._const:if(!declaration)this.unexpected();// NOTE: falls through to _var\ncase types._var:return this.parseVarStatement(node,starttype);case types._while:return this.parseWhileStatement(node);case types._with:return this.parseWithStatement(node);case types.braceL:return this.parseBlock();case types.semi:return this.parseEmptyStatement(node);case types._export:case types._import:if(this.hasPlugin(\"dynamicImport\")&&this.lookahead().type===types.parenL)break;if(!this.options.allowImportExportEverywhere){if(!topLevel){this.raise(this.state.start,\"'import' and 'export' may only appear at the top level\");}if(!this.inModule){this.raise(this.state.start,\"'import' and 'export' may appear only with 'sourceType: module'\");}}return starttype===types._import?this.parseImport(node):this.parseExport(node);case types.name:if(this.state.value===\"async\"){// peek ahead and see if next token is a function\nvar state=this.state.clone();this.next();if(this.match(types._function)&&!this.canInsertSemicolon()){this.expect(types._function);return this.parseFunction(node,true,false,true);}else{this.state=state;}}}// If the statement does not start with a statement keyword or a\n// brace, it's an ExpressionStatement or LabeledStatement. We\n// simply start parsing an expression, and afterwards, if the\n// next token is a colon and the expression was a simple\n// Identifier node, we switch to interpreting it as a label.\nvar maybeName=this.state.value;var expr=this.parseExpression();if(starttype===types.name&&expr.type===\"Identifier\"&&this.eat(types.colon)){return this.parseLabeledStatement(node,maybeName,expr);}else{return this.parseExpressionStatement(node,expr);}};pp$1.takeDecorators=function(node){if(this.state.decorators.length){node.decorators=this.state.decorators;this.state.decorators=[];}};pp$1.parseDecorators=function(allowExport){while(this.match(types.at)){var decorator=this.parseDecorator();this.state.decorators.push(decorator);}if(allowExport&&this.match(types._export)){return;}if(!this.match(types._class)){this.raise(this.state.start,\"Leading decorators must be attached to a class declaration\");}};pp$1.parseDecorator=function(){if(!this.hasPlugin(\"decorators\")){this.unexpected();}var node=this.startNode();this.next();node.expression=this.parseMaybeAssign();return this.finishNode(node,\"Decorator\");};pp$1.parseBreakContinueStatement=function(node,keyword){var isBreak=keyword===\"break\";this.next();if(this.isLineTerminator()){node.label=null;}else if(!this.match(types.name)){this.unexpected();}else{node.label=this.parseIdentifier();this.semicolon();}// Verify that there is an actual destination to break or\n// continue to.\nvar i=void 0;for(i=0;i<this.state.labels.length;++i){var lab=this.state.labels[i];if(node.label==null||lab.name===node.label.name){if(lab.kind!=null&&(isBreak||lab.kind===\"loop\"))break;if(node.label&&isBreak)break;}}if(i===this.state.labels.length)this.raise(node.start,\"Unsyntactic \"+keyword);return this.finishNode(node,isBreak?\"BreakStatement\":\"ContinueStatement\");};pp$1.parseDebuggerStatement=function(node){this.next();this.semicolon();return this.finishNode(node,\"DebuggerStatement\");};pp$1.parseDoStatement=function(node){this.next();this.state.labels.push(loopLabel);node.body=this.parseStatement(false);this.state.labels.pop();this.expect(types._while);node.test=this.parseParenExpression();this.eat(types.semi);return this.finishNode(node,\"DoWhileStatement\");};// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\npp$1.parseForStatement=function(node){this.next();this.state.labels.push(loopLabel);var forAwait=false;if(this.hasPlugin(\"asyncGenerators\")&&this.state.inAsync&&this.isContextual(\"await\")){forAwait=true;this.next();}this.expect(types.parenL);if(this.match(types.semi)){if(forAwait){this.unexpected();}return this.parseFor(node,null);}if(this.match(types._var)||this.match(types._let)||this.match(types._const)){var _init=this.startNode();var varKind=this.state.type;this.next();this.parseVar(_init,true,varKind);this.finishNode(_init,\"VariableDeclaration\");if(this.match(types._in)||this.isContextual(\"of\")){if(_init.declarations.length===1&&!_init.declarations[0].init){return this.parseForIn(node,_init,forAwait);}}if(forAwait){this.unexpected();}return this.parseFor(node,_init);}var refShorthandDefaultPos={start:0};var init=this.parseExpression(true,refShorthandDefaultPos);if(this.match(types._in)||this.isContextual(\"of\")){var description=this.isContextual(\"of\")?\"for-of statement\":\"for-in statement\";this.toAssignable(init,undefined,description);this.checkLVal(init,undefined,undefined,description);return this.parseForIn(node,init,forAwait);}else if(refShorthandDefaultPos.start){this.unexpected(refShorthandDefaultPos.start);}if(forAwait){this.unexpected();}return this.parseFor(node,init);};pp$1.parseFunctionStatement=function(node){this.next();return this.parseFunction(node,true);};pp$1.parseIfStatement=function(node){this.next();node.test=this.parseParenExpression();node.consequent=this.parseStatement(false);node.alternate=this.eat(types._else)?this.parseStatement(false):null;return this.finishNode(node,\"IfStatement\");};pp$1.parseReturnStatement=function(node){if(!this.state.inFunction&&!this.options.allowReturnOutsideFunction){this.raise(this.state.start,\"'return' outside of function\");}this.next();// In `return` (and `break`/`continue`), the keywords with\n// optional arguments, we eagerly look for a semicolon or the\n// possibility to insert one.\nif(this.isLineTerminator()){node.argument=null;}else{node.argument=this.parseExpression();this.semicolon();}return this.finishNode(node,\"ReturnStatement\");};pp$1.parseSwitchStatement=function(node){this.next();node.discriminant=this.parseParenExpression();node.cases=[];this.expect(types.braceL);this.state.labels.push(switchLabel);// Statements under must be grouped (by label) in SwitchCase\n// nodes. `cur` is used to keep the node that we are currently\n// adding statements to.\nvar cur=void 0;for(var sawDefault;!this.match(types.braceR);){if(this.match(types._case)||this.match(types._default)){var isCase=this.match(types._case);if(cur)this.finishNode(cur,\"SwitchCase\");node.cases.push(cur=this.startNode());cur.consequent=[];this.next();if(isCase){cur.test=this.parseExpression();}else{if(sawDefault)this.raise(this.state.lastTokStart,\"Multiple default clauses\");sawDefault=true;cur.test=null;}this.expect(types.colon);}else{if(cur){cur.consequent.push(this.parseStatement(true));}else{this.unexpected();}}}if(cur)this.finishNode(cur,\"SwitchCase\");this.next();// Closing brace\nthis.state.labels.pop();return this.finishNode(node,\"SwitchStatement\");};pp$1.parseThrowStatement=function(node){this.next();if(lineBreak.test(this.input.slice(this.state.lastTokEnd,this.state.start)))this.raise(this.state.lastTokEnd,\"Illegal newline after throw\");node.argument=this.parseExpression();this.semicolon();return this.finishNode(node,\"ThrowStatement\");};// Reused empty array added for node fields that are always empty.\nvar empty=[];pp$1.parseTryStatement=function(node){this.next();node.block=this.parseBlock();node.handler=null;if(this.match(types._catch)){var clause=this.startNode();this.next();this.expect(types.parenL);clause.param=this.parseBindingAtom();this.checkLVal(clause.param,true,(0,_create4.default)(null),\"catch clause\");this.expect(types.parenR);clause.body=this.parseBlock();node.handler=this.finishNode(clause,\"CatchClause\");}node.guardedHandlers=empty;node.finalizer=this.eat(types._finally)?this.parseBlock():null;if(!node.handler&&!node.finalizer){this.raise(node.start,\"Missing catch or finally clause\");}return this.finishNode(node,\"TryStatement\");};pp$1.parseVarStatement=function(node,kind){this.next();this.parseVar(node,false,kind);this.semicolon();return this.finishNode(node,\"VariableDeclaration\");};pp$1.parseWhileStatement=function(node){this.next();node.test=this.parseParenExpression();this.state.labels.push(loopLabel);node.body=this.parseStatement(false);this.state.labels.pop();return this.finishNode(node,\"WhileStatement\");};pp$1.parseWithStatement=function(node){if(this.state.strict)this.raise(this.state.start,\"'with' in strict mode\");this.next();node.object=this.parseParenExpression();node.body=this.parseStatement(false);return this.finishNode(node,\"WithStatement\");};pp$1.parseEmptyStatement=function(node){this.next();return this.finishNode(node,\"EmptyStatement\");};pp$1.parseLabeledStatement=function(node,maybeName,expr){for(var _iterator=this.state.labels,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator5.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var _label=_ref;if(_label.name===maybeName){this.raise(expr.start,\"Label '\"+maybeName+\"' is already declared\");}}var kind=this.state.type.isLoop?\"loop\":this.match(types._switch)?\"switch\":null;for(var i=this.state.labels.length-1;i>=0;i--){var label=this.state.labels[i];if(label.statementStart===node.start){label.statementStart=this.state.start;label.kind=kind;}else{break;}}this.state.labels.push({name:maybeName,kind:kind,statementStart:this.state.start});node.body=this.parseStatement(true);this.state.labels.pop();node.label=expr;return this.finishNode(node,\"LabeledStatement\");};pp$1.parseExpressionStatement=function(node,expr){node.expression=expr;this.semicolon();return this.finishNode(node,\"ExpressionStatement\");};// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\npp$1.parseBlock=function(allowDirectives){var node=this.startNode();this.expect(types.braceL);this.parseBlockBody(node,allowDirectives,false,types.braceR);return this.finishNode(node,\"BlockStatement\");};pp$1.isValidDirective=function(stmt){return stmt.type===\"ExpressionStatement\"&&stmt.expression.type===\"StringLiteral\"&&!stmt.expression.extra.parenthesized;};pp$1.parseBlockBody=function(node,allowDirectives,topLevel,end){node.body=[];node.directives=[];var parsedNonDirective=false;var oldStrict=void 0;var octalPosition=void 0;while(!this.eat(end)){if(!parsedNonDirective&&this.state.containsOctal&&!octalPosition){octalPosition=this.state.octalPosition;}var stmt=this.parseStatement(true,topLevel);if(allowDirectives&&!parsedNonDirective&&this.isValidDirective(stmt)){var directive=this.stmtToDirective(stmt);node.directives.push(directive);if(oldStrict===undefined&&directive.value.value===\"use strict\"){oldStrict=this.state.strict;this.setStrict(true);if(octalPosition){this.raise(octalPosition,\"Octal literal in strict mode\");}}continue;}parsedNonDirective=true;node.body.push(stmt);}if(oldStrict===false){this.setStrict(false);}};// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\npp$1.parseFor=function(node,init){node.init=init;this.expect(types.semi);node.test=this.match(types.semi)?null:this.parseExpression();this.expect(types.semi);node.update=this.match(types.parenR)?null:this.parseExpression();this.expect(types.parenR);node.body=this.parseStatement(false);this.state.labels.pop();return this.finishNode(node,\"ForStatement\");};// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\npp$1.parseForIn=function(node,init,forAwait){var type=void 0;if(forAwait){this.eatContextual(\"of\");type=\"ForAwaitStatement\";}else{type=this.match(types._in)?\"ForInStatement\":\"ForOfStatement\";this.next();}node.left=init;node.right=this.parseExpression();this.expect(types.parenR);node.body=this.parseStatement(false);this.state.labels.pop();return this.finishNode(node,type);};// Parse a list of variable declarations.\npp$1.parseVar=function(node,isFor,kind){node.declarations=[];node.kind=kind.keyword;for(;;){var decl=this.startNode();this.parseVarHead(decl);if(this.eat(types.eq)){decl.init=this.parseMaybeAssign(isFor);}else if(kind===types._const&&!(this.match(types._in)||this.isContextual(\"of\"))){this.unexpected();}else if(decl.id.type!==\"Identifier\"&&!(isFor&&(this.match(types._in)||this.isContextual(\"of\")))){this.raise(this.state.lastTokEnd,\"Complex binding patterns require an initialization value\");}else{decl.init=null;}node.declarations.push(this.finishNode(decl,\"VariableDeclarator\"));if(!this.eat(types.comma))break;}return node;};pp$1.parseVarHead=function(decl){decl.id=this.parseBindingAtom();this.checkLVal(decl.id,true,undefined,\"variable declaration\");};// Parse a function declaration or literal (depending on the\n// `isStatement` parameter).\npp$1.parseFunction=function(node,isStatement,allowExpressionBody,isAsync,optionalId){var oldInMethod=this.state.inMethod;this.state.inMethod=false;this.initFunction(node,isAsync);if(this.match(types.star)){if(node.async&&!this.hasPlugin(\"asyncGenerators\")){this.unexpected();}else{node.generator=true;this.next();}}if(isStatement&&!optionalId&&!this.match(types.name)&&!this.match(types._yield)){this.unexpected();}if(this.match(types.name)||this.match(types._yield)){node.id=this.parseBindingIdentifier();}this.parseFunctionParams(node);this.parseFunctionBody(node,allowExpressionBody);this.state.inMethod=oldInMethod;return this.finishNode(node,isStatement?\"FunctionDeclaration\":\"FunctionExpression\");};pp$1.parseFunctionParams=function(node){this.expect(types.parenL);node.params=this.parseBindingList(types.parenR);};// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\npp$1.parseClass=function(node,isStatement,optionalId){this.next();this.takeDecorators(node);this.parseClassId(node,isStatement,optionalId);this.parseClassSuper(node);this.parseClassBody(node);return this.finishNode(node,isStatement?\"ClassDeclaration\":\"ClassExpression\");};pp$1.isClassProperty=function(){return this.match(types.eq)||this.isLineTerminator();};pp$1.isClassMutatorStarter=function(){return false;};pp$1.parseClassBody=function(node){// class bodies are implicitly strict\nvar oldStrict=this.state.strict;this.state.strict=true;var hadConstructorCall=false;var hadConstructor=false;var decorators=[];var classBody=this.startNode();classBody.body=[];this.expect(types.braceL);while(!this.eat(types.braceR)){if(this.eat(types.semi)){if(decorators.length>0){this.raise(this.state.lastTokEnd,\"Decorators must not be followed by a semicolon\");}continue;}if(this.match(types.at)){decorators.push(this.parseDecorator());continue;}var method=this.startNode();// steal the decorators if there are any\nif(decorators.length){method.decorators=decorators;decorators=[];}var isConstructorCall=false;var isMaybeStatic=this.match(types.name)&&this.state.value===\"static\";var isGenerator=this.eat(types.star);var isGetSet=false;var isAsync=false;this.parsePropertyName(method);method.static=isMaybeStatic&&!this.match(types.parenL);if(method.static){isGenerator=this.eat(types.star);this.parsePropertyName(method);}if(!isGenerator){if(this.isClassProperty()){classBody.body.push(this.parseClassProperty(method));continue;}if(method.key.type===\"Identifier\"&&!method.computed&&this.hasPlugin(\"classConstructorCall\")&&method.key.name===\"call\"&&this.match(types.name)&&this.state.value===\"constructor\"){isConstructorCall=true;this.parsePropertyName(method);}}var isAsyncMethod=!this.match(types.parenL)&&!method.computed&&method.key.type===\"Identifier\"&&method.key.name===\"async\";if(isAsyncMethod){if(this.hasPlugin(\"asyncGenerators\")&&this.eat(types.star))isGenerator=true;isAsync=true;this.parsePropertyName(method);}method.kind=\"method\";if(!method.computed){var key=method.key;// handle get/set methods\n// eg. class Foo { get bar() {} set bar() {} }\nif(!isAsync&&!isGenerator&&!this.isClassMutatorStarter()&&key.type===\"Identifier\"&&!this.match(types.parenL)&&(key.name===\"get\"||key.name===\"set\")){isGetSet=true;method.kind=key.name;key=this.parsePropertyName(method);}// disallow invalid constructors\nvar isConstructor=!isConstructorCall&&!method.static&&(key.name===\"constructor\"||// Identifier\nkey.value===\"constructor\"// Literal\n);if(isConstructor){if(hadConstructor)this.raise(key.start,\"Duplicate constructor in the same class\");if(isGetSet)this.raise(key.start,\"Constructor can't have get/set modifier\");if(isGenerator)this.raise(key.start,\"Constructor can't be a generator\");if(isAsync)this.raise(key.start,\"Constructor can't be an async function\");method.kind=\"constructor\";hadConstructor=true;}// disallow static prototype method\nvar isStaticPrototype=method.static&&(key.name===\"prototype\"||// Identifier\nkey.value===\"prototype\"// Literal\n);if(isStaticPrototype){this.raise(key.start,\"Classes may not have static property named prototype\");}}// convert constructor to a constructor call\nif(isConstructorCall){if(hadConstructorCall)this.raise(method.start,\"Duplicate constructor call in the same class\");method.kind=\"constructorCall\";hadConstructorCall=true;}// disallow decorators on class constructors\nif((method.kind===\"constructor\"||method.kind===\"constructorCall\")&&method.decorators){this.raise(method.start,\"You can't attach decorators to a class constructor\");}this.parseClassMethod(classBody,method,isGenerator,isAsync);if(isGetSet){this.checkGetterSetterParamCount(method);}}if(decorators.length){this.raise(this.state.start,\"You have trailing decorators with no method\");}node.body=this.finishNode(classBody,\"ClassBody\");this.state.strict=oldStrict;};pp$1.parseClassProperty=function(node){if(this.match(types.eq)){if(!this.hasPlugin(\"classProperties\"))this.unexpected();this.next();node.value=this.parseMaybeAssign();}else{node.value=null;}this.semicolon();return this.finishNode(node,\"ClassProperty\");};pp$1.parseClassMethod=function(classBody,method,isGenerator,isAsync){this.parseMethod(method,isGenerator,isAsync);classBody.body.push(this.finishNode(method,\"ClassMethod\"));};pp$1.parseClassId=function(node,isStatement,optionalId){if(this.match(types.name)){node.id=this.parseIdentifier();}else{if(optionalId||!isStatement){node.id=null;}else{this.unexpected();}}};pp$1.parseClassSuper=function(node){node.superClass=this.eat(types._extends)?this.parseExprSubscripts():null;};// Parses module export declaration.\npp$1.parseExport=function(node){this.next();// export * from '...'\nif(this.match(types.star)){var specifier=this.startNode();this.next();if(this.hasPlugin(\"exportExtensions\")&&this.eatContextual(\"as\")){specifier.exported=this.parseIdentifier();node.specifiers=[this.finishNode(specifier,\"ExportNamespaceSpecifier\")];this.parseExportSpecifiersMaybe(node);this.parseExportFrom(node,true);}else{this.parseExportFrom(node,true);return this.finishNode(node,\"ExportAllDeclaration\");}}else if(this.hasPlugin(\"exportExtensions\")&&this.isExportDefaultSpecifier()){var _specifier=this.startNode();_specifier.exported=this.parseIdentifier(true);node.specifiers=[this.finishNode(_specifier,\"ExportDefaultSpecifier\")];if(this.match(types.comma)&&this.lookahead().type===types.star){this.expect(types.comma);var _specifier2=this.startNode();this.expect(types.star);this.expectContextual(\"as\");_specifier2.exported=this.parseIdentifier();node.specifiers.push(this.finishNode(_specifier2,\"ExportNamespaceSpecifier\"));}else{this.parseExportSpecifiersMaybe(node);}this.parseExportFrom(node,true);}else if(this.eat(types._default)){// export default ...\nvar expr=this.startNode();var needsSemi=false;if(this.eat(types._function)){expr=this.parseFunction(expr,true,false,false,true);}else if(this.match(types._class)){expr=this.parseClass(expr,true,true);}else{needsSemi=true;expr=this.parseMaybeAssign();}node.declaration=expr;if(needsSemi)this.semicolon();this.checkExport(node,true,true);return this.finishNode(node,\"ExportDefaultDeclaration\");}else if(this.shouldParseExportDeclaration()){node.specifiers=[];node.source=null;node.declaration=this.parseExportDeclaration(node);}else{// export { x, y as z } [from '...']\nnode.declaration=null;node.specifiers=this.parseExportSpecifiers();this.parseExportFrom(node);}this.checkExport(node,true);return this.finishNode(node,\"ExportNamedDeclaration\");};pp$1.parseExportDeclaration=function(){return this.parseStatement(true);};pp$1.isExportDefaultSpecifier=function(){if(this.match(types.name)){return this.state.value!==\"type\"&&this.state.value!==\"async\"&&this.state.value!==\"interface\";}if(!this.match(types._default)){return false;}var lookahead=this.lookahead();return lookahead.type===types.comma||lookahead.type===types.name&&lookahead.value===\"from\";};pp$1.parseExportSpecifiersMaybe=function(node){if(this.eat(types.comma)){node.specifiers=node.specifiers.concat(this.parseExportSpecifiers());}};pp$1.parseExportFrom=function(node,expect){if(this.eatContextual(\"from\")){node.source=this.match(types.string)?this.parseExprAtom():this.unexpected();this.checkExport(node);}else{if(expect){this.unexpected();}else{node.source=null;}}this.semicolon();};pp$1.shouldParseExportDeclaration=function(){return this.state.type.keyword===\"var\"||this.state.type.keyword===\"const\"||this.state.type.keyword===\"let\"||this.state.type.keyword===\"function\"||this.state.type.keyword===\"class\"||this.isContextual(\"async\");};pp$1.checkExport=function(node,checkNames,isDefault){if(checkNames){// Check for duplicate exports\nif(isDefault){// Default exports\nthis.checkDuplicateExports(node,\"default\");}else if(node.specifiers&&node.specifiers.length){// Named exports\nfor(var _iterator2=node.specifiers,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator5.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var specifier=_ref2;this.checkDuplicateExports(specifier,specifier.exported.name);}}else if(node.declaration){// Exported declarations\nif(node.declaration.type===\"FunctionDeclaration\"||node.declaration.type===\"ClassDeclaration\"){this.checkDuplicateExports(node,node.declaration.id.name);}else if(node.declaration.type===\"VariableDeclaration\"){for(var _iterator3=node.declaration.declarations,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator5.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var declaration=_ref3;this.checkDeclaration(declaration.id);}}}}if(this.state.decorators.length){var isClass=node.declaration&&(node.declaration.type===\"ClassDeclaration\"||node.declaration.type===\"ClassExpression\");if(!node.declaration||!isClass){this.raise(node.start,\"You can only use decorators on an export when exporting a class\");}this.takeDecorators(node.declaration);}};pp$1.checkDeclaration=function(node){if(node.type===\"ObjectPattern\"){for(var _iterator4=node.properties,_isArray4=Array.isArray(_iterator4),_i4=0,_iterator4=_isArray4?_iterator4:(0,_getIterator5.default)(_iterator4);;){var _ref4;if(_isArray4){if(_i4>=_iterator4.length)break;_ref4=_iterator4[_i4++];}else{_i4=_iterator4.next();if(_i4.done)break;_ref4=_i4.value;}var prop=_ref4;this.checkDeclaration(prop);}}else if(node.type===\"ArrayPattern\"){for(var _iterator5=node.elements,_isArray5=Array.isArray(_iterator5),_i5=0,_iterator5=_isArray5?_iterator5:(0,_getIterator5.default)(_iterator5);;){var _ref5;if(_isArray5){if(_i5>=_iterator5.length)break;_ref5=_iterator5[_i5++];}else{_i5=_iterator5.next();if(_i5.done)break;_ref5=_i5.value;}var elem=_ref5;if(elem){this.checkDeclaration(elem);}}}else if(node.type===\"ObjectProperty\"){this.checkDeclaration(node.value);}else if(node.type===\"RestElement\"||node.type===\"RestProperty\"){this.checkDeclaration(node.argument);}else if(node.type===\"Identifier\"){this.checkDuplicateExports(node,node.name);}};pp$1.checkDuplicateExports=function(node,name){if(this.state.exportedIdentifiers.indexOf(name)>-1){this.raiseDuplicateExportError(node,name);}this.state.exportedIdentifiers.push(name);};pp$1.raiseDuplicateExportError=function(node,name){this.raise(node.start,name===\"default\"?\"Only one default export allowed per module.\":\"`\"+name+\"` has already been exported. Exported identifiers must be unique.\");};// Parses a comma-separated list of module exports.\npp$1.parseExportSpecifiers=function(){var nodes=[];var first=true;var needsFrom=void 0;// export { x, y as z } [from '...']\nthis.expect(types.braceL);while(!this.eat(types.braceR)){if(first){first=false;}else{this.expect(types.comma);if(this.eat(types.braceR))break;}var isDefault=this.match(types._default);if(isDefault&&!needsFrom)needsFrom=true;var node=this.startNode();node.local=this.parseIdentifier(isDefault);node.exported=this.eatContextual(\"as\")?this.parseIdentifier(true):node.local.__clone();nodes.push(this.finishNode(node,\"ExportSpecifier\"));}// https://github.com/ember-cli/ember-cli/pull/3739\nif(needsFrom&&!this.isContextual(\"from\")){this.unexpected();}return nodes;};// Parses import declaration.\npp$1.parseImport=function(node){this.eat(types._import);// import '...'\nif(this.match(types.string)){node.specifiers=[];node.source=this.parseExprAtom();}else{node.specifiers=[];this.parseImportSpecifiers(node);this.expectContextual(\"from\");node.source=this.match(types.string)?this.parseExprAtom():this.unexpected();}this.semicolon();return this.finishNode(node,\"ImportDeclaration\");};// Parses a comma-separated list of module imports.\npp$1.parseImportSpecifiers=function(node){var first=true;if(this.match(types.name)){// import defaultObj, { x, y as z } from '...'\nvar startPos=this.state.start;var startLoc=this.state.startLoc;node.specifiers.push(this.parseImportSpecifierDefault(this.parseIdentifier(),startPos,startLoc));if(!this.eat(types.comma))return;}if(this.match(types.star)){var specifier=this.startNode();this.next();this.expectContextual(\"as\");specifier.local=this.parseIdentifier();this.checkLVal(specifier.local,true,undefined,\"import namespace specifier\");node.specifiers.push(this.finishNode(specifier,\"ImportNamespaceSpecifier\"));return;}this.expect(types.braceL);while(!this.eat(types.braceR)){if(first){first=false;}else{// Detect an attempt to deep destructure\nif(this.eat(types.colon)){this.unexpected(null,\"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\");}this.expect(types.comma);if(this.eat(types.braceR))break;}this.parseImportSpecifier(node);}};pp$1.parseImportSpecifier=function(node){var specifier=this.startNode();specifier.imported=this.parseIdentifier(true);if(this.eatContextual(\"as\")){specifier.local=this.parseIdentifier();}else{this.checkReservedWord(specifier.imported.name,specifier.start,true,true);specifier.local=specifier.imported.__clone();}this.checkLVal(specifier.local,true,undefined,\"import specifier\");node.specifiers.push(this.finishNode(specifier,\"ImportSpecifier\"));};pp$1.parseImportSpecifierDefault=function(id,startPos,startLoc){var node=this.startNodeAt(startPos,startLoc);node.local=id;this.checkLVal(node.local,true,undefined,\"default import specifier\");return this.finishNode(node,\"ImportDefaultSpecifier\");};var pp$2=Parser.prototype;// Convert existing expression atom to assignable pattern\n// if possible.\npp$2.toAssignable=function(node,isBinding,contextDescription){if(node){switch(node.type){case\"Identifier\":case\"ObjectPattern\":case\"ArrayPattern\":case\"AssignmentPattern\":break;case\"ObjectExpression\":node.type=\"ObjectPattern\";for(var _iterator=node.properties,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator5.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var prop=_ref;if(prop.type===\"ObjectMethod\"){if(prop.kind===\"get\"||prop.kind===\"set\"){this.raise(prop.key.start,\"Object pattern can't contain getter or setter\");}else{this.raise(prop.key.start,\"Object pattern can't contain methods\");}}else{this.toAssignable(prop,isBinding,\"object destructuring pattern\");}}break;case\"ObjectProperty\":this.toAssignable(node.value,isBinding,contextDescription);break;case\"SpreadProperty\":node.type=\"RestProperty\";break;case\"ArrayExpression\":node.type=\"ArrayPattern\";this.toAssignableList(node.elements,isBinding,contextDescription);break;case\"AssignmentExpression\":if(node.operator===\"=\"){node.type=\"AssignmentPattern\";delete node.operator;}else{this.raise(node.left.end,\"Only '=' operator can be used for specifying default value.\");}break;case\"MemberExpression\":if(!isBinding)break;default:{var message=\"Invalid left-hand side\"+(contextDescription?\" in \"+contextDescription:/* istanbul ignore next */\"expression\");this.raise(node.start,message);}}}return node;};// Convert list of expression atoms to binding list.\npp$2.toAssignableList=function(exprList,isBinding,contextDescription){var end=exprList.length;if(end){var last=exprList[end-1];if(last&&last.type===\"RestElement\"){--end;}else if(last&&last.type===\"SpreadElement\"){last.type=\"RestElement\";var arg=last.argument;this.toAssignable(arg,isBinding,contextDescription);if(arg.type!==\"Identifier\"&&arg.type!==\"MemberExpression\"&&arg.type!==\"ArrayPattern\"){this.unexpected(arg.start);}--end;}}for(var i=0;i<end;i++){var elt=exprList[i];if(elt)this.toAssignable(elt,isBinding,contextDescription);}return exprList;};// Convert list of expression atoms to a list of\npp$2.toReferencedList=function(exprList){return exprList;};// Parses spread element.\npp$2.parseSpread=function(refShorthandDefaultPos){var node=this.startNode();this.next();node.argument=this.parseMaybeAssign(false,refShorthandDefaultPos);return this.finishNode(node,\"SpreadElement\");};pp$2.parseRest=function(){var node=this.startNode();this.next();node.argument=this.parseBindingIdentifier();return this.finishNode(node,\"RestElement\");};pp$2.shouldAllowYieldIdentifier=function(){return this.match(types._yield)&&!this.state.strict&&!this.state.inGenerator;};pp$2.parseBindingIdentifier=function(){return this.parseIdentifier(this.shouldAllowYieldIdentifier());};// Parses lvalue (assignable) atom.\npp$2.parseBindingAtom=function(){switch(this.state.type){case types._yield:if(this.state.strict||this.state.inGenerator)this.unexpected();// fall-through\ncase types.name:return this.parseIdentifier(true);case types.bracketL:var node=this.startNode();this.next();node.elements=this.parseBindingList(types.bracketR,true);return this.finishNode(node,\"ArrayPattern\");case types.braceL:return this.parseObj(true);default:this.unexpected();}};pp$2.parseBindingList=function(close,allowEmpty){var elts=[];var first=true;while(!this.eat(close)){if(first){first=false;}else{this.expect(types.comma);}if(allowEmpty&&this.match(types.comma)){elts.push(null);}else if(this.eat(close)){break;}else if(this.match(types.ellipsis)){elts.push(this.parseAssignableListItemTypes(this.parseRest()));this.expect(close);break;}else{var decorators=[];while(this.match(types.at)){decorators.push(this.parseDecorator());}var left=this.parseMaybeDefault();if(decorators.length){left.decorators=decorators;}this.parseAssignableListItemTypes(left);elts.push(this.parseMaybeDefault(left.start,left.loc.start,left));}}return elts;};pp$2.parseAssignableListItemTypes=function(param){return param;};// Parses assignment pattern around given atom if possible.\npp$2.parseMaybeDefault=function(startPos,startLoc,left){startLoc=startLoc||this.state.startLoc;startPos=startPos||this.state.start;left=left||this.parseBindingAtom();if(!this.eat(types.eq))return left;var node=this.startNodeAt(startPos,startLoc);node.left=left;node.right=this.parseMaybeAssign();return this.finishNode(node,\"AssignmentPattern\");};// Verify that a node is an lval — something that can be assigned\n// to.\npp$2.checkLVal=function(expr,isBinding,checkClashes,contextDescription){switch(expr.type){case\"Identifier\":this.checkReservedWord(expr.name,expr.start,false,true);if(checkClashes){// we need to prefix this with an underscore for the cases where we have a key of\n// `__proto__`. there's a bug in old V8 where the following wouldn't work:\n//\n//   > var obj = Object.create(null);\n//   undefined\n//   > obj.__proto__\n//   null\n//   > obj.__proto__ = true;\n//   true\n//   > obj.__proto__\n//   null\nvar key=\"_\"+expr.name;if(checkClashes[key]){this.raise(expr.start,\"Argument name clash in strict mode\");}else{checkClashes[key]=true;}}break;case\"MemberExpression\":if(isBinding)this.raise(expr.start,(isBinding?\"Binding\":\"Assigning to\")+\" member expression\");break;case\"ObjectPattern\":for(var _iterator2=expr.properties,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator5.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var prop=_ref2;if(prop.type===\"ObjectProperty\")prop=prop.value;this.checkLVal(prop,isBinding,checkClashes,\"object destructuring pattern\");}break;case\"ArrayPattern\":for(var _iterator3=expr.elements,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator5.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var elem=_ref3;if(elem)this.checkLVal(elem,isBinding,checkClashes,\"array destructuring pattern\");}break;case\"AssignmentPattern\":this.checkLVal(expr.left,isBinding,checkClashes,\"assignment pattern\");break;case\"RestProperty\":this.checkLVal(expr.argument,isBinding,checkClashes,\"rest property\");break;case\"RestElement\":this.checkLVal(expr.argument,isBinding,checkClashes,\"rest element\");break;default:{var message=(isBinding?/* istanbul ignore next */\"Binding invalid\":\"Invalid\")+\" left-hand side\"+(contextDescription?\" in \"+contextDescription:/* istanbul ignore next */\"expression\");this.raise(expr.start,message);}}};/* eslint max-len: 0 */// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\nvar pp$3=Parser.prototype;// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\npp$3.checkPropClash=function(prop,propHash){if(prop.computed||prop.kind)return;var key=prop.key;// It is either an Identifier or a String/NumericLiteral\nvar name=key.type===\"Identifier\"?key.name:String(key.value);if(name===\"__proto__\"){if(propHash.proto)this.raise(key.start,\"Redefinition of __proto__ property\");propHash.proto=true;}};// Convenience method to parse an Expression only\npp$3.getExpression=function(){this.nextToken();var expr=this.parseExpression();if(!this.match(types.eof)){this.unexpected();}return expr;};// ### Expression parsing\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function (s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\npp$3.parseExpression=function(noIn,refShorthandDefaultPos){var startPos=this.state.start;var startLoc=this.state.startLoc;var expr=this.parseMaybeAssign(noIn,refShorthandDefaultPos);if(this.match(types.comma)){var node=this.startNodeAt(startPos,startLoc);node.expressions=[expr];while(this.eat(types.comma)){node.expressions.push(this.parseMaybeAssign(noIn,refShorthandDefaultPos));}this.toReferencedList(node.expressions);return this.finishNode(node,\"SequenceExpression\");}return expr;};// Parse an assignment expression. This includes applications of\n// operators like `+=`.\npp$3.parseMaybeAssign=function(noIn,refShorthandDefaultPos,afterLeftParse,refNeedsArrowPos){var startPos=this.state.start;var startLoc=this.state.startLoc;if(this.match(types._yield)&&this.state.inGenerator){var _left=this.parseYield();if(afterLeftParse)_left=afterLeftParse.call(this,_left,startPos,startLoc);return _left;}var failOnShorthandAssign=void 0;if(refShorthandDefaultPos){failOnShorthandAssign=false;}else{refShorthandDefaultPos={start:0};failOnShorthandAssign=true;}if(this.match(types.parenL)||this.match(types.name)){this.state.potentialArrowAt=this.state.start;}var left=this.parseMaybeConditional(noIn,refShorthandDefaultPos,refNeedsArrowPos);if(afterLeftParse)left=afterLeftParse.call(this,left,startPos,startLoc);if(this.state.type.isAssign){var node=this.startNodeAt(startPos,startLoc);node.operator=this.state.value;node.left=this.match(types.eq)?this.toAssignable(left,undefined,\"assignment expression\"):left;refShorthandDefaultPos.start=0;// reset because shorthand default was used correctly\nthis.checkLVal(left,undefined,undefined,\"assignment expression\");if(left.extra&&left.extra.parenthesized){var errorMsg=void 0;if(left.type===\"ObjectPattern\"){errorMsg=\"`({a}) = 0` use `({a} = 0)`\";}else if(left.type===\"ArrayPattern\"){errorMsg=\"`([a]) = 0` use `([a] = 0)`\";}if(errorMsg){this.raise(left.start,\"You're trying to assign to a parenthesized expression, eg. instead of \"+errorMsg);}}this.next();node.right=this.parseMaybeAssign(noIn);return this.finishNode(node,\"AssignmentExpression\");}else if(failOnShorthandAssign&&refShorthandDefaultPos.start){this.unexpected(refShorthandDefaultPos.start);}return left;};// Parse a ternary conditional (`?:`) operator.\npp$3.parseMaybeConditional=function(noIn,refShorthandDefaultPos,refNeedsArrowPos){var startPos=this.state.start;var startLoc=this.state.startLoc;var expr=this.parseExprOps(noIn,refShorthandDefaultPos);if(refShorthandDefaultPos&&refShorthandDefaultPos.start)return expr;return this.parseConditional(expr,noIn,startPos,startLoc,refNeedsArrowPos);};pp$3.parseConditional=function(expr,noIn,startPos,startLoc){if(this.eat(types.question)){var node=this.startNodeAt(startPos,startLoc);node.test=expr;node.consequent=this.parseMaybeAssign();this.expect(types.colon);node.alternate=this.parseMaybeAssign(noIn);return this.finishNode(node,\"ConditionalExpression\");}return expr;};// Start the precedence parser.\npp$3.parseExprOps=function(noIn,refShorthandDefaultPos){var startPos=this.state.start;var startLoc=this.state.startLoc;var expr=this.parseMaybeUnary(refShorthandDefaultPos);if(refShorthandDefaultPos&&refShorthandDefaultPos.start){return expr;}else{return this.parseExprOp(expr,startPos,startLoc,-1,noIn);}};// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\npp$3.parseExprOp=function(left,leftStartPos,leftStartLoc,minPrec,noIn){var prec=this.state.type.binop;if(prec!=null&&(!noIn||!this.match(types._in))){if(prec>minPrec){var node=this.startNodeAt(leftStartPos,leftStartLoc);node.left=left;node.operator=this.state.value;if(node.operator===\"**\"&&left.type===\"UnaryExpression\"&&left.extra&&!left.extra.parenthesizedArgument&&!left.extra.parenthesized){this.raise(left.argument.start,\"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\");}var op=this.state.type;this.next();var startPos=this.state.start;var startLoc=this.state.startLoc;node.right=this.parseExprOp(this.parseMaybeUnary(),startPos,startLoc,op.rightAssociative?prec-1:prec,noIn);this.finishNode(node,op===types.logicalOR||op===types.logicalAND?\"LogicalExpression\":\"BinaryExpression\");return this.parseExprOp(node,leftStartPos,leftStartLoc,minPrec,noIn);}}return left;};// Parse unary operators, both prefix and postfix.\npp$3.parseMaybeUnary=function(refShorthandDefaultPos){if(this.state.type.prefix){var node=this.startNode();var update=this.match(types.incDec);node.operator=this.state.value;node.prefix=true;this.next();var argType=this.state.type;node.argument=this.parseMaybeUnary();this.addExtra(node,\"parenthesizedArgument\",argType===types.parenL&&(!node.argument.extra||!node.argument.extra.parenthesized));if(refShorthandDefaultPos&&refShorthandDefaultPos.start){this.unexpected(refShorthandDefaultPos.start);}if(update){this.checkLVal(node.argument,undefined,undefined,\"prefix operation\");}else if(this.state.strict&&node.operator===\"delete\"&&node.argument.type===\"Identifier\"){this.raise(node.start,\"Deleting local variable in strict mode\");}return this.finishNode(node,update?\"UpdateExpression\":\"UnaryExpression\");}var startPos=this.state.start;var startLoc=this.state.startLoc;var expr=this.parseExprSubscripts(refShorthandDefaultPos);if(refShorthandDefaultPos&&refShorthandDefaultPos.start)return expr;while(this.state.type.postfix&&!this.canInsertSemicolon()){var _node=this.startNodeAt(startPos,startLoc);_node.operator=this.state.value;_node.prefix=false;_node.argument=expr;this.checkLVal(expr,undefined,undefined,\"postfix operation\");this.next();expr=this.finishNode(_node,\"UpdateExpression\");}return expr;};// Parse call, dot, and `[]`-subscript expressions.\npp$3.parseExprSubscripts=function(refShorthandDefaultPos){var startPos=this.state.start;var startLoc=this.state.startLoc;var potentialArrowAt=this.state.potentialArrowAt;var expr=this.parseExprAtom(refShorthandDefaultPos);if(expr.type===\"ArrowFunctionExpression\"&&expr.start===potentialArrowAt){return expr;}if(refShorthandDefaultPos&&refShorthandDefaultPos.start){return expr;}return this.parseSubscripts(expr,startPos,startLoc);};pp$3.parseSubscripts=function(base,startPos,startLoc,noCalls){for(;;){if(!noCalls&&this.eat(types.doubleColon)){var node=this.startNodeAt(startPos,startLoc);node.object=base;node.callee=this.parseNoCallExpr();return this.parseSubscripts(this.finishNode(node,\"BindExpression\"),startPos,startLoc,noCalls);}else if(this.eat(types.dot)){var _node2=this.startNodeAt(startPos,startLoc);_node2.object=base;_node2.property=this.parseIdentifier(true);_node2.computed=false;base=this.finishNode(_node2,\"MemberExpression\");}else if(this.eat(types.bracketL)){var _node3=this.startNodeAt(startPos,startLoc);_node3.object=base;_node3.property=this.parseExpression();_node3.computed=true;this.expect(types.bracketR);base=this.finishNode(_node3,\"MemberExpression\");}else if(!noCalls&&this.match(types.parenL)){var possibleAsync=this.state.potentialArrowAt===base.start&&base.type===\"Identifier\"&&base.name===\"async\"&&!this.canInsertSemicolon();this.next();var _node4=this.startNodeAt(startPos,startLoc);_node4.callee=base;_node4.arguments=this.parseCallExpressionArguments(types.parenR,possibleAsync);if(_node4.callee.type===\"Import\"&&_node4.arguments.length!==1){this.raise(_node4.start,\"import() requires exactly one argument\");}base=this.finishNode(_node4,\"CallExpression\");if(possibleAsync&&this.shouldParseAsyncArrow()){return this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos,startLoc),_node4);}else{this.toReferencedList(_node4.arguments);}}else if(this.match(types.backQuote)){var _node5=this.startNodeAt(startPos,startLoc);_node5.tag=base;_node5.quasi=this.parseTemplate();base=this.finishNode(_node5,\"TaggedTemplateExpression\");}else{return base;}}};pp$3.parseCallExpressionArguments=function(close,possibleAsyncArrow){var elts=[];var innerParenStart=void 0;var first=true;while(!this.eat(close)){if(first){first=false;}else{this.expect(types.comma);if(this.eat(close))break;}// we need to make sure that if this is an async arrow functions, that we don't allow inner parens inside the params\nif(this.match(types.parenL)&&!innerParenStart){innerParenStart=this.state.start;}elts.push(this.parseExprListItem(false,possibleAsyncArrow?{start:0}:undefined,possibleAsyncArrow?{start:0}:undefined));}// we found an async arrow function so let's not allow any inner parens\nif(possibleAsyncArrow&&innerParenStart&&this.shouldParseAsyncArrow()){this.unexpected();}return elts;};pp$3.shouldParseAsyncArrow=function(){return this.match(types.arrow);};pp$3.parseAsyncArrowFromCallExpression=function(node,call){this.expect(types.arrow);return this.parseArrowExpression(node,call.arguments,true);};// Parse a no-call expression (like argument of `new` or `::` operators).\npp$3.parseNoCallExpr=function(){var startPos=this.state.start;var startLoc=this.state.startLoc;return this.parseSubscripts(this.parseExprAtom(),startPos,startLoc,true);};// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\npp$3.parseExprAtom=function(refShorthandDefaultPos){var canBeArrow=this.state.potentialArrowAt===this.state.start;var node=void 0;switch(this.state.type){case types._super:if(!this.state.inMethod&&!this.options.allowSuperOutsideMethod){this.raise(this.state.start,\"'super' outside of function or class\");}node=this.startNode();this.next();if(!this.match(types.parenL)&&!this.match(types.bracketL)&&!this.match(types.dot)){this.unexpected();}if(this.match(types.parenL)&&this.state.inMethod!==\"constructor\"&&!this.options.allowSuperOutsideMethod){this.raise(node.start,\"super() outside of class constructor\");}return this.finishNode(node,\"Super\");case types._import:if(!this.hasPlugin(\"dynamicImport\"))this.unexpected();node=this.startNode();this.next();if(!this.match(types.parenL)){this.unexpected(null,types.parenL);}return this.finishNode(node,\"Import\");case types._this:node=this.startNode();this.next();return this.finishNode(node,\"ThisExpression\");case types._yield:if(this.state.inGenerator)this.unexpected();case types.name:node=this.startNode();var allowAwait=this.state.value===\"await\"&&this.state.inAsync;var allowYield=this.shouldAllowYieldIdentifier();var id=this.parseIdentifier(allowAwait||allowYield);if(id.name===\"await\"){if(this.state.inAsync||this.inModule){return this.parseAwait(node);}}else if(id.name===\"async\"&&this.match(types._function)&&!this.canInsertSemicolon()){this.next();return this.parseFunction(node,false,false,true);}else if(canBeArrow&&id.name===\"async\"&&this.match(types.name)){var params=[this.parseIdentifier()];this.expect(types.arrow);// let foo = bar => {};\nreturn this.parseArrowExpression(node,params,true);}if(canBeArrow&&!this.canInsertSemicolon()&&this.eat(types.arrow)){return this.parseArrowExpression(node,[id]);}return id;case types._do:if(this.hasPlugin(\"doExpressions\")){var _node6=this.startNode();this.next();var oldInFunction=this.state.inFunction;var oldLabels=this.state.labels;this.state.labels=[];this.state.inFunction=false;_node6.body=this.parseBlock(false,true);this.state.inFunction=oldInFunction;this.state.labels=oldLabels;return this.finishNode(_node6,\"DoExpression\");}case types.regexp:var value=this.state.value;node=this.parseLiteral(value.value,\"RegExpLiteral\");node.pattern=value.pattern;node.flags=value.flags;return node;case types.num:return this.parseLiteral(this.state.value,\"NumericLiteral\");case types.string:return this.parseLiteral(this.state.value,\"StringLiteral\");case types._null:node=this.startNode();this.next();return this.finishNode(node,\"NullLiteral\");case types._true:case types._false:node=this.startNode();node.value=this.match(types._true);this.next();return this.finishNode(node,\"BooleanLiteral\");case types.parenL:return this.parseParenAndDistinguishExpression(null,null,canBeArrow);case types.bracketL:node=this.startNode();this.next();node.elements=this.parseExprList(types.bracketR,true,refShorthandDefaultPos);this.toReferencedList(node.elements);return this.finishNode(node,\"ArrayExpression\");case types.braceL:return this.parseObj(false,refShorthandDefaultPos);case types._function:return this.parseFunctionExpression();case types.at:this.parseDecorators();case types._class:node=this.startNode();this.takeDecorators(node);return this.parseClass(node,false);case types._new:return this.parseNew();case types.backQuote:return this.parseTemplate();case types.doubleColon:node=this.startNode();this.next();node.object=null;var callee=node.callee=this.parseNoCallExpr();if(callee.type===\"MemberExpression\"){return this.finishNode(node,\"BindExpression\");}else{this.raise(callee.start,\"Binding should be performed on object property.\");}default:this.unexpected();}};pp$3.parseFunctionExpression=function(){var node=this.startNode();var meta=this.parseIdentifier(true);if(this.state.inGenerator&&this.eat(types.dot)&&this.hasPlugin(\"functionSent\")){return this.parseMetaProperty(node,meta,\"sent\");}else{return this.parseFunction(node,false);}};pp$3.parseMetaProperty=function(node,meta,propertyName){node.meta=meta;node.property=this.parseIdentifier(true);if(node.property.name!==propertyName){this.raise(node.property.start,\"The only valid meta property for new is \"+meta.name+\".\"+propertyName);}return this.finishNode(node,\"MetaProperty\");};pp$3.parseLiteral=function(value,type,startPos,startLoc){startPos=startPos||this.state.start;startLoc=startLoc||this.state.startLoc;var node=this.startNodeAt(startPos,startLoc);this.addExtra(node,\"rawValue\",value);this.addExtra(node,\"raw\",this.input.slice(startPos,this.state.end));node.value=value;this.next();return this.finishNode(node,type);};pp$3.parseParenExpression=function(){this.expect(types.parenL);var val=this.parseExpression();this.expect(types.parenR);return val;};pp$3.parseParenAndDistinguishExpression=function(startPos,startLoc,canBeArrow){startPos=startPos||this.state.start;startLoc=startLoc||this.state.startLoc;var val=void 0;this.expect(types.parenL);var innerStartPos=this.state.start;var innerStartLoc=this.state.startLoc;var exprList=[];var refShorthandDefaultPos={start:0};var refNeedsArrowPos={start:0};var first=true;var spreadStart=void 0;var optionalCommaStart=void 0;while(!this.match(types.parenR)){if(first){first=false;}else{this.expect(types.comma,refNeedsArrowPos.start||null);if(this.match(types.parenR)){optionalCommaStart=this.state.start;break;}}if(this.match(types.ellipsis)){var spreadNodeStartPos=this.state.start;var spreadNodeStartLoc=this.state.startLoc;spreadStart=this.state.start;exprList.push(this.parseParenItem(this.parseRest(),spreadNodeStartLoc,spreadNodeStartPos));break;}else{exprList.push(this.parseMaybeAssign(false,refShorthandDefaultPos,this.parseParenItem,refNeedsArrowPos));}}var innerEndPos=this.state.start;var innerEndLoc=this.state.startLoc;this.expect(types.parenR);var arrowNode=this.startNodeAt(startPos,startLoc);if(canBeArrow&&this.shouldParseArrow()&&(arrowNode=this.parseArrow(arrowNode))){for(var _iterator=exprList,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator5.default)(_iterator);;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value;}var param=_ref;if(param.extra&&param.extra.parenthesized)this.unexpected(param.extra.parenStart);}return this.parseArrowExpression(arrowNode,exprList);}if(!exprList.length){this.unexpected(this.state.lastTokStart);}if(optionalCommaStart)this.unexpected(optionalCommaStart);if(spreadStart)this.unexpected(spreadStart);if(refShorthandDefaultPos.start)this.unexpected(refShorthandDefaultPos.start);if(refNeedsArrowPos.start)this.unexpected(refNeedsArrowPos.start);if(exprList.length>1){val=this.startNodeAt(innerStartPos,innerStartLoc);val.expressions=exprList;this.toReferencedList(val.expressions);this.finishNodeAt(val,\"SequenceExpression\",innerEndPos,innerEndLoc);}else{val=exprList[0];}this.addExtra(val,\"parenthesized\",true);this.addExtra(val,\"parenStart\",startPos);return val;};pp$3.shouldParseArrow=function(){return!this.canInsertSemicolon();};pp$3.parseArrow=function(node){if(this.eat(types.arrow)){return node;}};pp$3.parseParenItem=function(node){return node;};// New's precedence is slightly tricky. It must allow its argument\n// to be a `[]` or dot subscript expression, but not a call — at\n// least, not without wrapping it in parentheses. Thus, it uses the\npp$3.parseNew=function(){var node=this.startNode();var meta=this.parseIdentifier(true);if(this.eat(types.dot)){return this.parseMetaProperty(node,meta,\"target\");}node.callee=this.parseNoCallExpr();if(this.eat(types.parenL)){node.arguments=this.parseExprList(types.parenR);this.toReferencedList(node.arguments);}else{node.arguments=[];}return this.finishNode(node,\"NewExpression\");};// Parse template expression.\npp$3.parseTemplateElement=function(){var elem=this.startNode();elem.value={raw:this.input.slice(this.state.start,this.state.end).replace(/\\r\\n?/g,\"\\n\"),cooked:this.state.value};this.next();elem.tail=this.match(types.backQuote);return this.finishNode(elem,\"TemplateElement\");};pp$3.parseTemplate=function(){var node=this.startNode();this.next();node.expressions=[];var curElt=this.parseTemplateElement();node.quasis=[curElt];while(!curElt.tail){this.expect(types.dollarBraceL);node.expressions.push(this.parseExpression());this.expect(types.braceR);node.quasis.push(curElt=this.parseTemplateElement());}this.next();return this.finishNode(node,\"TemplateLiteral\");};// Parse an object literal or binding pattern.\npp$3.parseObj=function(isPattern,refShorthandDefaultPos){var decorators=[];var propHash=(0,_create4.default)(null);var first=true;var node=this.startNode();node.properties=[];this.next();var firstRestLocation=null;while(!this.eat(types.braceR)){if(first){first=false;}else{this.expect(types.comma);if(this.eat(types.braceR))break;}while(this.match(types.at)){decorators.push(this.parseDecorator());}var prop=this.startNode(),isGenerator=false,isAsync=false,startPos=void 0,startLoc=void 0;if(decorators.length){prop.decorators=decorators;decorators=[];}if(this.hasPlugin(\"objectRestSpread\")&&this.match(types.ellipsis)){prop=this.parseSpread(isPattern?{start:0}:undefined);prop.type=isPattern?\"RestProperty\":\"SpreadProperty\";if(isPattern)this.toAssignable(prop.argument,true,\"object pattern\");node.properties.push(prop);if(isPattern){var position=this.state.start;if(firstRestLocation!==null){this.unexpected(firstRestLocation,\"Cannot have multiple rest elements when destructuring\");}else if(this.eat(types.braceR)){break;}else if(this.match(types.comma)&&this.lookahead().type===types.braceR){// TODO: temporary rollback\n// this.unexpected(position, \"A trailing comma is not permitted after the rest element\");\ncontinue;}else{firstRestLocation=position;continue;}}else{continue;}}prop.method=false;prop.shorthand=false;if(isPattern||refShorthandDefaultPos){startPos=this.state.start;startLoc=this.state.startLoc;}if(!isPattern){isGenerator=this.eat(types.star);}if(!isPattern&&this.isContextual(\"async\")){if(isGenerator)this.unexpected();var asyncId=this.parseIdentifier();if(this.match(types.colon)||this.match(types.parenL)||this.match(types.braceR)||this.match(types.eq)||this.match(types.comma)){prop.key=asyncId;prop.computed=false;}else{isAsync=true;if(this.hasPlugin(\"asyncGenerators\"))isGenerator=this.eat(types.star);this.parsePropertyName(prop);}}else{this.parsePropertyName(prop);}this.parseObjPropValue(prop,startPos,startLoc,isGenerator,isAsync,isPattern,refShorthandDefaultPos);this.checkPropClash(prop,propHash);if(prop.shorthand){this.addExtra(prop,\"shorthand\",true);}node.properties.push(prop);}if(firstRestLocation!==null){this.unexpected(firstRestLocation,\"The rest element has to be the last element when destructuring\");}if(decorators.length){this.raise(this.state.start,\"You have trailing decorators with no property\");}return this.finishNode(node,isPattern?\"ObjectPattern\":\"ObjectExpression\");};pp$3.isGetterOrSetterMethod=function(prop,isPattern){return!isPattern&&!prop.computed&&prop.key.type===\"Identifier\"&&(prop.key.name===\"get\"||prop.key.name===\"set\")&&(this.match(types.string)||// get \"string\"() {}\nthis.match(types.num)||// get 1() {}\nthis.match(types.bracketL)||// get [\"string\"]() {}\nthis.match(types.name)||// get foo() {}\nthis.state.type.keyword// get debugger() {}\n);};// get methods aren't allowed to have any parameters\n// set methods must have exactly 1 parameter\npp$3.checkGetterSetterParamCount=function(method){var paramCount=method.kind===\"get\"?0:1;if(method.params.length!==paramCount){var start=method.start;if(method.kind===\"get\"){this.raise(start,\"getter should have no params\");}else{this.raise(start,\"setter should have exactly one param\");}}};pp$3.parseObjectMethod=function(prop,isGenerator,isAsync,isPattern){if(isAsync||isGenerator||this.match(types.parenL)){if(isPattern)this.unexpected();prop.kind=\"method\";prop.method=true;this.parseMethod(prop,isGenerator,isAsync);return this.finishNode(prop,\"ObjectMethod\");}if(this.isGetterOrSetterMethod(prop,isPattern)){if(isGenerator||isAsync)this.unexpected();prop.kind=prop.key.name;this.parsePropertyName(prop);this.parseMethod(prop);this.checkGetterSetterParamCount(prop);return this.finishNode(prop,\"ObjectMethod\");}};pp$3.parseObjectProperty=function(prop,startPos,startLoc,isPattern,refShorthandDefaultPos){if(this.eat(types.colon)){prop.value=isPattern?this.parseMaybeDefault(this.state.start,this.state.startLoc):this.parseMaybeAssign(false,refShorthandDefaultPos);return this.finishNode(prop,\"ObjectProperty\");}if(!prop.computed&&prop.key.type===\"Identifier\"){if(isPattern){this.checkReservedWord(prop.key.name,prop.key.start,true,true);prop.value=this.parseMaybeDefault(startPos,startLoc,prop.key.__clone());}else if(this.match(types.eq)&&refShorthandDefaultPos){if(!refShorthandDefaultPos.start){refShorthandDefaultPos.start=this.state.start;}prop.value=this.parseMaybeDefault(startPos,startLoc,prop.key.__clone());}else{prop.value=prop.key.__clone();}prop.shorthand=true;return this.finishNode(prop,\"ObjectProperty\");}};pp$3.parseObjPropValue=function(prop,startPos,startLoc,isGenerator,isAsync,isPattern,refShorthandDefaultPos){var node=this.parseObjectMethod(prop,isGenerator,isAsync,isPattern)||this.parseObjectProperty(prop,startPos,startLoc,isPattern,refShorthandDefaultPos);if(!node)this.unexpected();return node;};pp$3.parsePropertyName=function(prop){if(this.eat(types.bracketL)){prop.computed=true;prop.key=this.parseMaybeAssign();this.expect(types.bracketR);}else{prop.computed=false;var oldInPropertyName=this.state.inPropertyName;this.state.inPropertyName=true;prop.key=this.match(types.num)||this.match(types.string)?this.parseExprAtom():this.parseIdentifier(true);this.state.inPropertyName=oldInPropertyName;}return prop.key;};// Initialize empty function node.\npp$3.initFunction=function(node,isAsync){node.id=null;node.generator=false;node.expression=false;node.async=!!isAsync;};// Parse object or class method.\npp$3.parseMethod=function(node,isGenerator,isAsync){var oldInMethod=this.state.inMethod;this.state.inMethod=node.kind||true;this.initFunction(node,isAsync);this.expect(types.parenL);node.params=this.parseBindingList(types.parenR);node.generator=!!isGenerator;this.parseFunctionBody(node);this.state.inMethod=oldInMethod;return node;};// Parse arrow function expression with given parameters.\npp$3.parseArrowExpression=function(node,params,isAsync){this.initFunction(node,isAsync);node.params=this.toAssignableList(params,true,\"arrow function parameters\");this.parseFunctionBody(node,true);return this.finishNode(node,\"ArrowFunctionExpression\");};pp$3.isStrictBody=function(node,isExpression){if(!isExpression&&node.body.directives.length){for(var _iterator2=node.body.directives,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator5.default)(_iterator2);;){var _ref2;if(_isArray2){if(_i2>=_iterator2.length)break;_ref2=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref2=_i2.value;}var directive=_ref2;if(directive.value.value===\"use strict\"){return true;}}}return false;};// Parse function body and check parameters.\npp$3.parseFunctionBody=function(node,allowExpression){var isExpression=allowExpression&&!this.match(types.braceL);var oldInAsync=this.state.inAsync;this.state.inAsync=node.async;if(isExpression){node.body=this.parseMaybeAssign();node.expression=true;}else{// Start a new scope with regard to labels and the `inFunction`\n// flag (restore them to their old value afterwards).\nvar oldInFunc=this.state.inFunction;var oldInGen=this.state.inGenerator;var oldLabels=this.state.labels;this.state.inFunction=true;this.state.inGenerator=node.generator;this.state.labels=[];node.body=this.parseBlock(true);node.expression=false;this.state.inFunction=oldInFunc;this.state.inGenerator=oldInGen;this.state.labels=oldLabels;}this.state.inAsync=oldInAsync;// If this is a strict mode function, verify that argument names\n// are not repeated, and it does not try to bind the words `eval`\n// or `arguments`.\nvar isStrict=this.isStrictBody(node,isExpression);// Also check when allowExpression === true for arrow functions\nvar checkLVal=this.state.strict||allowExpression||isStrict;if(isStrict&&node.id&&node.id.type===\"Identifier\"&&node.id.name===\"yield\"){this.raise(node.id.start,\"Binding yield in strict mode\");}if(checkLVal){var nameHash=(0,_create4.default)(null);var oldStrict=this.state.strict;if(isStrict)this.state.strict=true;if(node.id){this.checkLVal(node.id,true,undefined,\"function name\");}for(var _iterator3=node.params,_isArray3=Array.isArray(_iterator3),_i3=0,_iterator3=_isArray3?_iterator3:(0,_getIterator5.default)(_iterator3);;){var _ref3;if(_isArray3){if(_i3>=_iterator3.length)break;_ref3=_iterator3[_i3++];}else{_i3=_iterator3.next();if(_i3.done)break;_ref3=_i3.value;}var param=_ref3;if(isStrict&&param.type!==\"Identifier\"){this.raise(param.start,\"Non-simple parameter in strict mode\");}this.checkLVal(param,true,nameHash,\"function parameter list\");}this.state.strict=oldStrict;}};// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\npp$3.parseExprList=function(close,allowEmpty,refShorthandDefaultPos){var elts=[];var first=true;while(!this.eat(close)){if(first){first=false;}else{this.expect(types.comma);if(this.eat(close))break;}elts.push(this.parseExprListItem(allowEmpty,refShorthandDefaultPos));}return elts;};pp$3.parseExprListItem=function(allowEmpty,refShorthandDefaultPos,refNeedsArrowPos){var elt=void 0;if(allowEmpty&&this.match(types.comma)){elt=null;}else if(this.match(types.ellipsis)){elt=this.parseSpread(refShorthandDefaultPos);}else{elt=this.parseMaybeAssign(false,refShorthandDefaultPos,this.parseParenItem,refNeedsArrowPos);}return elt;};// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\npp$3.parseIdentifier=function(liberal){var node=this.startNode();if(!liberal){this.checkReservedWord(this.state.value,this.state.start,!!this.state.type.keyword,false);}if(this.match(types.name)){node.name=this.state.value;}else if(this.state.type.keyword){node.name=this.state.type.keyword;}else{this.unexpected();}if(!liberal&&node.name===\"await\"&&this.state.inAsync){this.raise(node.start,\"invalid use of await inside of an async function\");}node.loc.identifierName=node.name;this.next();return this.finishNode(node,\"Identifier\");};pp$3.checkReservedWord=function(word,startLoc,checkKeywords,isBinding){if(this.isReservedWord(word)||checkKeywords&&this.isKeyword(word)){this.raise(startLoc,word+\" is a reserved word\");}if(this.state.strict&&(reservedWords.strict(word)||isBinding&&reservedWords.strictBind(word))){this.raise(startLoc,word+\" is a reserved word in strict mode\");}};// Parses await expression inside async function.\npp$3.parseAwait=function(node){// istanbul ignore next: this condition is checked at the call site so won't be hit here\nif(!this.state.inAsync){this.unexpected();}if(this.match(types.star)){this.raise(node.start,\"await* has been removed from the async functions proposal. Use Promise.all() instead.\");}node.argument=this.parseMaybeUnary();return this.finishNode(node,\"AwaitExpression\");};// Parses yield expression inside generator.\npp$3.parseYield=function(){var node=this.startNode();this.next();if(this.match(types.semi)||this.canInsertSemicolon()||!this.match(types.star)&&!this.state.type.startsExpr){node.delegate=false;node.argument=null;}else{node.delegate=this.eat(types.star);node.argument=this.parseMaybeAssign();}return this.finishNode(node,\"YieldExpression\");};// Start an AST node, attaching a start offset.\nvar pp$4=Parser.prototype;var commentKeys=[\"leadingComments\",\"trailingComments\",\"innerComments\"];var Node=function(){function Node(pos,loc,filename){classCallCheck(this,Node);this.type=\"\";this.start=pos;this.end=0;this.loc=new SourceLocation(loc);if(filename)this.loc.filename=filename;}Node.prototype.__clone=function __clone(){var node2=new Node();for(var key in this){// Do not clone comments that are already attached to the node\nif(commentKeys.indexOf(key)<0){node2[key]=this[key];}}return node2;};return Node;}();pp$4.startNode=function(){return new Node(this.state.start,this.state.startLoc,this.filename);};pp$4.startNodeAt=function(pos,loc){return new Node(pos,loc,this.filename);};function finishNodeAt(node,type,pos,loc){node.type=type;node.end=pos;node.loc.end=loc;this.processComment(node);return node;}// Finish an AST node, adding `type` and `end` properties.\npp$4.finishNode=function(node,type){return finishNodeAt.call(this,node,type,this.state.lastTokEnd,this.state.lastTokEndLoc);};// Finish node at given position\npp$4.finishNodeAt=function(node,type,pos,loc){return finishNodeAt.call(this,node,type,pos,loc);};var pp$5=Parser.prototype;// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\npp$5.raise=function(pos,message){var loc=getLineInfo(this.input,pos);message+=\" (\"+loc.line+\":\"+loc.column+\")\";var err=new SyntaxError(message);err.pos=pos;err.loc=loc;throw err;};/* eslint max-len: 0 *//**\n * Based on the comment attachment algorithm used in espree and estraverse.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright\n *   notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n *   notice, this list of conditions and the following disclaimer in the\n *   documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */function last(stack){return stack[stack.length-1];}var pp$6=Parser.prototype;pp$6.addComment=function(comment){if(this.filename)comment.loc.filename=this.filename;this.state.trailingComments.push(comment);this.state.leadingComments.push(comment);};pp$6.processComment=function(node){if(node.type===\"Program\"&&node.body.length>0)return;var stack=this.state.commentStack;var lastChild=void 0,trailingComments=void 0,i=void 0,j=void 0;if(this.state.trailingComments.length>0){// If the first comment in trailingComments comes after the\n// current node, then we're good - all comments in the array will\n// come after the node and so it's safe to add them as official\n// trailingComments.\nif(this.state.trailingComments[0].start>=node.end){trailingComments=this.state.trailingComments;this.state.trailingComments=[];}else{// Otherwise, if the first comment doesn't come after the\n// current node, that means we have a mix of leading and trailing\n// comments in the array and that leadingComments contains the\n// same items as trailingComments. Reset trailingComments to\n// zero items and we'll handle this by evaluating leadingComments\n// later.\nthis.state.trailingComments.length=0;}}else{var lastInStack=last(stack);if(stack.length>0&&lastInStack.trailingComments&&lastInStack.trailingComments[0].start>=node.end){trailingComments=lastInStack.trailingComments;lastInStack.trailingComments=null;}}// Eating the stack.\nwhile(stack.length>0&&last(stack).start>=node.start){lastChild=stack.pop();}if(lastChild){if(lastChild.leadingComments){if(lastChild!==node&&last(lastChild.leadingComments).end<=node.start){node.leadingComments=lastChild.leadingComments;lastChild.leadingComments=null;}else{// A leading comment for an anonymous class had been stolen by its first ClassMethod,\n// so this takes back the leading comment.\n// See also: https://github.com/eslint/espree/issues/158\nfor(i=lastChild.leadingComments.length-2;i>=0;--i){if(lastChild.leadingComments[i].end<=node.start){node.leadingComments=lastChild.leadingComments.splice(0,i+1);break;}}}}}else if(this.state.leadingComments.length>0){if(last(this.state.leadingComments).end<=node.start){if(this.state.commentPreviousNode){for(j=0;j<this.state.leadingComments.length;j++){if(this.state.leadingComments[j].end<this.state.commentPreviousNode.end){this.state.leadingComments.splice(j,1);j--;}}}if(this.state.leadingComments.length>0){node.leadingComments=this.state.leadingComments;this.state.leadingComments=[];}}else{// https://github.com/eslint/espree/issues/2\n//\n// In special cases, such as return (without a value) and\n// debugger, all comments will end up as leadingComments and\n// will otherwise be eliminated. This step runs when the\n// commentStack is empty and there are comments left\n// in leadingComments.\n//\n// This loop figures out the stopping point between the actual\n// leading and trailing comments by finding the location of the\n// first comment that comes after the given node.\nfor(i=0;i<this.state.leadingComments.length;i++){if(this.state.leadingComments[i].end>node.start){break;}}// Split the array based on the location of the first comment\n// that comes after the node. Keep in mind that this could\n// result in an empty array, and if so, the array must be\n// deleted.\nnode.leadingComments=this.state.leadingComments.slice(0,i);if(node.leadingComments.length===0){node.leadingComments=null;}// Similarly, trailing comments are attached later. The variable\n// must be reset to null if there are no trailing comments.\ntrailingComments=this.state.leadingComments.slice(i);if(trailingComments.length===0){trailingComments=null;}}}this.state.commentPreviousNode=node;if(trailingComments){if(trailingComments.length&&trailingComments[0].start>=node.start&&last(trailingComments).end<=node.end){node.innerComments=trailingComments;}else{node.trailingComments=trailingComments;}}stack.push(node);};var pp$7=Parser.prototype;pp$7.estreeParseRegExpLiteral=function(_ref){var pattern=_ref.pattern,flags=_ref.flags;var regex=null;try{regex=new RegExp(pattern,flags);}catch(e){// In environments that don't support these flags value will\n// be null as the regex can't be represented natively.\n}var node=this.estreeParseLiteral(regex);node.regex={pattern:pattern,flags:flags};return node;};pp$7.estreeParseLiteral=function(value){return this.parseLiteral(value,\"Literal\");};pp$7.directiveToStmt=function(directive){var directiveLiteral=directive.value;var stmt=this.startNodeAt(directive.start,directive.loc.start);var expression=this.startNodeAt(directiveLiteral.start,directiveLiteral.loc.start);expression.value=directiveLiteral.value;expression.raw=directiveLiteral.extra.raw;stmt.expression=this.finishNodeAt(expression,\"Literal\",directiveLiteral.end,directiveLiteral.loc.end);stmt.directive=directiveLiteral.extra.raw.slice(1,-1);return this.finishNodeAt(stmt,\"ExpressionStatement\",directive.end,directive.loc.end);};function isSimpleProperty(node){return node&&node.type===\"Property\"&&node.kind===\"init\"&&node.method===false;}var estreePlugin=function estreePlugin(instance){instance.extend(\"checkDeclaration\",function(inner){return function(node){if(isSimpleProperty(node)){this.checkDeclaration(node.value);}else{inner.call(this,node);}};});instance.extend(\"checkGetterSetterParamCount\",function(){return function(prop){var paramCount=prop.kind===\"get\"?0:1;if(prop.value.params.length!==paramCount){var start=prop.start;if(prop.kind===\"get\"){this.raise(start,\"getter should have no params\");}else{this.raise(start,\"setter should have exactly one param\");}}};});instance.extend(\"checkLVal\",function(inner){return function(expr,isBinding,checkClashes){var _this=this;switch(expr.type){case\"ObjectPattern\":expr.properties.forEach(function(prop){_this.checkLVal(prop.type===\"Property\"?prop.value:prop,isBinding,checkClashes,\"object destructuring pattern\");});break;default:for(var _len=arguments.length,args=Array(_len>3?_len-3:0),_key=3;_key<_len;_key++){args[_key-3]=arguments[_key];}inner.call.apply(inner,[this,expr,isBinding,checkClashes].concat(args));}};});instance.extend(\"checkPropClash\",function(){return function(prop,propHash){if(prop.computed||!isSimpleProperty(prop))return;var key=prop.key;// It is either an Identifier or a String/NumericLiteral\nvar name=key.type===\"Identifier\"?key.name:String(key.value);if(name===\"__proto__\"){if(propHash.proto)this.raise(key.start,\"Redefinition of __proto__ property\");propHash.proto=true;}};});instance.extend(\"isStrictBody\",function(){return function(node,isExpression){if(!isExpression&&node.body.body.length>0){for(var _iterator=node.body.body,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:(0,_getIterator5.default)(_iterator);;){var _ref2;if(_isArray){if(_i>=_iterator.length)break;_ref2=_iterator[_i++];}else{_i=_iterator.next();if(_i.done)break;_ref2=_i.value;}var directive=_ref2;if(directive.type===\"ExpressionStatement\"&&directive.expression.type===\"Literal\"){if(directive.expression.value===\"use strict\")return true;}else{// Break for the first non literal expression\nbreak;}}}return false;};});instance.extend(\"isValidDirective\",function(){return function(stmt){return stmt.type===\"ExpressionStatement\"&&stmt.expression.type===\"Literal\"&&typeof stmt.expression.value===\"string\"&&(!stmt.expression.extra||!stmt.expression.extra.parenthesized);};});instance.extend(\"parseBlockBody\",function(inner){return function(node){var _this2=this;for(var _len2=arguments.length,args=Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){args[_key2-1]=arguments[_key2];}inner.call.apply(inner,[this,node].concat(args));node.directives.reverse().forEach(function(directive){node.body.unshift(_this2.directiveToStmt(directive));});delete node.directives;};});instance.extend(\"parseClassMethod\",function(inner){return function(classBody){for(var _len3=arguments.length,args=Array(_len3>1?_len3-1:0),_key3=1;_key3<_len3;_key3++){args[_key3-1]=arguments[_key3];}inner.call.apply(inner,[this,classBody].concat(args));var body=classBody.body;body[body.length-1].type=\"MethodDefinition\";};});instance.extend(\"parseExprAtom\",function(inner){return function(){switch(this.state.type){case types.regexp:return this.estreeParseRegExpLiteral(this.state.value);case types.num:case types.string:return this.estreeParseLiteral(this.state.value);case types._null:return this.estreeParseLiteral(null);case types._true:return this.estreeParseLiteral(true);case types._false:return this.estreeParseLiteral(false);default:for(var _len4=arguments.length,args=Array(_len4),_key4=0;_key4<_len4;_key4++){args[_key4]=arguments[_key4];}return inner.call.apply(inner,[this].concat(args));}};});instance.extend(\"parseLiteral\",function(inner){return function(){for(var _len5=arguments.length,args=Array(_len5),_key5=0;_key5<_len5;_key5++){args[_key5]=arguments[_key5];}var node=inner.call.apply(inner,[this].concat(args));node.raw=node.extra.raw;delete node.extra;return node;};});instance.extend(\"parseMethod\",function(inner){return function(node){var funcNode=this.startNode();funcNode.kind=node.kind;// provide kind, so inner method correctly sets state\nfor(var _len6=arguments.length,args=Array(_len6>1?_len6-1:0),_key6=1;_key6<_len6;_key6++){args[_key6-1]=arguments[_key6];}funcNode=inner.call.apply(inner,[this,funcNode].concat(args));delete funcNode.kind;node.value=this.finishNode(funcNode,\"FunctionExpression\");return node;};});instance.extend(\"parseObjectMethod\",function(inner){return function(){for(var _len7=arguments.length,args=Array(_len7),_key7=0;_key7<_len7;_key7++){args[_key7]=arguments[_key7];}var node=inner.call.apply(inner,[this].concat(args));if(node){if(node.kind===\"method\")node.kind=\"init\";node.type=\"Property\";}return node;};});instance.extend(\"parseObjectProperty\",function(inner){return function(){for(var _len8=arguments.length,args=Array(_len8),_key8=0;_key8<_len8;_key8++){args[_key8]=arguments[_key8];}var node=inner.call.apply(inner,[this].concat(args));if(node){node.kind=\"init\";node.type=\"Property\";}return node;};});instance.extend(\"toAssignable\",function(inner){return function(node,isBinding){for(var _len9=arguments.length,args=Array(_len9>2?_len9-2:0),_key9=2;_key9<_len9;_key9++){args[_key9-2]=arguments[_key9];}if(isSimpleProperty(node)){this.toAssignable.apply(this,[node.value,isBinding].concat(args));return node;}else if(node.type===\"ObjectExpression\"){node.type=\"ObjectPattern\";for(var _iterator2=node.properties,_isArray2=Array.isArray(_iterator2),_i2=0,_iterator2=_isArray2?_iterator2:(0,_getIterator5.default)(_iterator2);;){var _ref3;if(_isArray2){if(_i2>=_iterator2.length)break;_ref3=_iterator2[_i2++];}else{_i2=_iterator2.next();if(_i2.done)break;_ref3=_i2.value;}var prop=_ref3;if(prop.kind===\"get\"||prop.kind===\"set\"){this.raise(prop.key.start,\"Object pattern can't contain getter or setter\");}else if(prop.method){this.raise(prop.key.start,\"Object pattern can't contain methods\");}else{this.toAssignable(prop,isBinding,\"object destructuring pattern\");}}return node;}return inner.call.apply(inner,[this,node,isBinding].concat(args));};});};/* eslint max-len: 0 */var primitiveTypes=[\"any\",\"mixed\",\"empty\",\"bool\",\"boolean\",\"number\",\"string\",\"void\",\"null\"];var pp$8=Parser.prototype;pp$8.flowParseTypeInitialiser=function(tok){var oldInType=this.state.inType;this.state.inType=true;this.expect(tok||types.colon);var type=this.flowParseType();this.state.inType=oldInType;return type;};pp$8.flowParsePredicate=function(){var node=this.startNode();var moduloLoc=this.state.startLoc;var moduloPos=this.state.start;this.expect(types.modulo);var checksLoc=this.state.startLoc;this.expectContextual(\"checks\");// Force '%' and 'checks' to be adjacent\nif(moduloLoc.line!==checksLoc.line||moduloLoc.column!==checksLoc.column-1){this.raise(moduloPos,\"Spaces between ´%´ and ´checks´ are not allowed here.\");}if(this.eat(types.parenL)){node.expression=this.parseExpression();this.expect(types.parenR);return this.finishNode(node,\"DeclaredPredicate\");}else{return this.finishNode(node,\"InferredPredicate\");}};pp$8.flowParseTypeAndPredicateInitialiser=function(){var oldInType=this.state.inType;this.state.inType=true;this.expect(types.colon);var type=null;var predicate=null;if(this.match(types.modulo)){this.state.inType=oldInType;predicate=this.flowParsePredicate();}else{type=this.flowParseType();this.state.inType=oldInType;if(this.match(types.modulo)){predicate=this.flowParsePredicate();}}return[type,predicate];};pp$8.flowParseDeclareClass=function(node){this.next();this.flowParseInterfaceish(node,true);return this.finishNode(node,\"DeclareClass\");};pp$8.flowParseDeclareFunction=function(node){this.next();var id=node.id=this.parseIdentifier();var typeNode=this.startNode();var typeContainer=this.startNode();if(this.isRelational(\"<\")){typeNode.typeParameters=this.flowParseTypeParameterDeclaration();}else{typeNode.typeParameters=null;}this.expect(types.parenL);var tmp=this.flowParseFunctionTypeParams();typeNode.params=tmp.params;typeNode.rest=tmp.rest;this.expect(types.parenR);var predicate=null;var _flowParseTypeAndPred=this.flowParseTypeAndPredicateInitialiser();typeNode.returnType=_flowParseTypeAndPred[0];predicate=_flowParseTypeAndPred[1];typeContainer.typeAnnotation=this.finishNode(typeNode,\"FunctionTypeAnnotation\");typeContainer.predicate=predicate;id.typeAnnotation=this.finishNode(typeContainer,\"TypeAnnotation\");this.finishNode(id,id.type);this.semicolon();return this.finishNode(node,\"DeclareFunction\");};pp$8.flowParseDeclare=function(node){if(this.match(types._class)){return this.flowParseDeclareClass(node);}else if(this.match(types._function)){return this.flowParseDeclareFunction(node);}else if(this.match(types._var)){return this.flowParseDeclareVariable(node);}else if(this.isContextual(\"module\")){if(this.lookahead().type===types.dot){return this.flowParseDeclareModuleExports(node);}else{return this.flowParseDeclareModule(node);}}else if(this.isContextual(\"type\")){return this.flowParseDeclareTypeAlias(node);}else if(this.isContextual(\"interface\")){return this.flowParseDeclareInterface(node);}else{this.unexpected();}};pp$8.flowParseDeclareVariable=function(node){this.next();node.id=this.flowParseTypeAnnotatableIdentifier();this.semicolon();return this.finishNode(node,\"DeclareVariable\");};pp$8.flowParseDeclareModule=function(node){this.next();if(this.match(types.string)){node.id=this.parseExprAtom();}else{node.id=this.parseIdentifier();}var bodyNode=node.body=this.startNode();var body=bodyNode.body=[];this.expect(types.braceL);while(!this.match(types.braceR)){var _bodyNode=this.startNode();if(this.match(types._import)){var lookahead=this.lookahead();if(lookahead.value!==\"type\"&&lookahead.value!==\"typeof\"){this.unexpected(null,\"Imports within a `declare module` body must always be `import type` or `import typeof`\");}this.parseImport(_bodyNode);}else{this.expectContextual(\"declare\",\"Only declares and type imports are allowed inside declare module\");_bodyNode=this.flowParseDeclare(_bodyNode,true);}body.push(_bodyNode);}this.expect(types.braceR);this.finishNode(bodyNode,\"BlockStatement\");return this.finishNode(node,\"DeclareModule\");};pp$8.flowParseDeclareModuleExports=function(node){this.expectContextual(\"module\");this.expect(types.dot);this.expectContextual(\"exports\");node.typeAnnotation=this.flowParseTypeAnnotation();this.semicolon();return this.finishNode(node,\"DeclareModuleExports\");};pp$8.flowParseDeclareTypeAlias=function(node){this.next();this.flowParseTypeAlias(node);return this.finishNode(node,\"DeclareTypeAlias\");};pp$8.flowParseDeclareInterface=function(node){this.next();this.flowParseInterfaceish(node);return this.finishNode(node,\"DeclareInterface\");};// Interfaces\npp$8.flowParseInterfaceish=function(node,allowStatic){node.id=this.parseIdentifier();if(this.isRelational(\"<\")){node.typeParameters=this.flowParseTypeParameterDeclaration();}else{node.typeParameters=null;}node.extends=[];node.mixins=[];if(this.eat(types._extends)){do{node.extends.push(this.flowParseInterfaceExtends());}while(this.eat(types.comma));}if(this.isContextual(\"mixins\")){this.next();do{node.mixins.push(this.flowParseInterfaceExtends());}while(this.eat(types.comma));}node.body=this.flowParseObjectType(allowStatic);};pp$8.flowParseInterfaceExtends=function(){var node=this.startNode();node.id=this.flowParseQualifiedTypeIdentifier();if(this.isRelational(\"<\")){node.typeParameters=this.flowParseTypeParameterInstantiation();}else{node.typeParameters=null;}return this.finishNode(node,\"InterfaceExtends\");};pp$8.flowParseInterface=function(node){this.flowParseInterfaceish(node,false);return this.finishNode(node,\"InterfaceDeclaration\");};pp$8.flowParseRestrictedIdentifier=function(liberal){if(primitiveTypes.indexOf(this.state.value)>-1){this.raise(this.state.start,\"Cannot overwrite primitive type \"+this.state.value);}return this.parseIdentifier(liberal);};// Type aliases\npp$8.flowParseTypeAlias=function(node){node.id=this.flowParseRestrictedIdentifier();if(this.isRelational(\"<\")){node.typeParameters=this.flowParseTypeParameterDeclaration();}else{node.typeParameters=null;}node.right=this.flowParseTypeInitialiser(types.eq);this.semicolon();return this.finishNode(node,\"TypeAlias\");};// Type annotations\npp$8.flowParseTypeParameter=function(){var node=this.startNode();var variance=this.flowParseVariance();var ident=this.flowParseTypeAnnotatableIdentifier();node.name=ident.name;node.variance=variance;node.bound=ident.typeAnnotation;if(this.match(types.eq)){this.eat(types.eq);node.default=this.flowParseType();}return this.finishNode(node,\"TypeParameter\");};pp$8.flowParseTypeParameterDeclaration=function(){var oldInType=this.state.inType;var node=this.startNode();node.params=[];this.state.inType=true;// istanbul ignore else: this condition is already checked at all call sites\nif(this.isRelational(\"<\")||this.match(types.jsxTagStart)){this.next();}else{this.unexpected();}do{node.params.push(this.flowParseTypeParameter());if(!this.isRelational(\">\")){this.expect(types.comma);}}while(!this.isRelational(\">\"));this.expectRelational(\">\");this.state.inType=oldInType;return this.finishNode(node,\"TypeParameterDeclaration\");};pp$8.flowParseTypeParameterInstantiation=function(){var node=this.startNode();var oldInType=this.state.inType;node.params=[];this.state.inType=true;this.expectRelational(\"<\");while(!this.isRelational(\">\")){node.params.push(this.flowParseType());if(!this.isRelational(\">\")){this.expect(types.comma);}}this.expectRelational(\">\");this.state.inType=oldInType;return this.finishNode(node,\"TypeParameterInstantiation\");};pp$8.flowParseObjectPropertyKey=function(){return this.match(types.num)||this.match(types.string)?this.parseExprAtom():this.parseIdentifier(true);};pp$8.flowParseObjectTypeIndexer=function(node,isStatic,variance){node.static=isStatic;this.expect(types.bracketL);if(this.lookahead().type===types.colon){node.id=this.flowParseObjectPropertyKey();node.key=this.flowParseTypeInitialiser();}else{node.id=null;node.key=this.flowParseType();}this.expect(types.bracketR);node.value=this.flowParseTypeInitialiser();node.variance=variance;this.flowObjectTypeSemicolon();return this.finishNode(node,\"ObjectTypeIndexer\");};pp$8.flowParseObjectTypeMethodish=function(node){node.params=[];node.rest=null;node.typeParameters=null;if(this.isRelational(\"<\")){node.typeParameters=this.flowParseTypeParameterDeclaration();}this.expect(types.parenL);while(this.match(types.name)){node.params.push(this.flowParseFunctionTypeParam());if(!this.match(types.parenR)){this.expect(types.comma);}}if(this.eat(types.ellipsis)){node.rest=this.flowParseFunctionTypeParam();}this.expect(types.parenR);node.returnType=this.flowParseTypeInitialiser();return this.finishNode(node,\"FunctionTypeAnnotation\");};pp$8.flowParseObjectTypeMethod=function(startPos,startLoc,isStatic,key){var node=this.startNodeAt(startPos,startLoc);node.value=this.flowParseObjectTypeMethodish(this.startNodeAt(startPos,startLoc));node.static=isStatic;node.key=key;node.optional=false;this.flowObjectTypeSemicolon();return this.finishNode(node,\"ObjectTypeProperty\");};pp$8.flowParseObjectTypeCallProperty=function(node,isStatic){var valueNode=this.startNode();node.static=isStatic;node.value=this.flowParseObjectTypeMethodish(valueNode);this.flowObjectTypeSemicolon();return this.finishNode(node,\"ObjectTypeCallProperty\");};pp$8.flowParseObjectType=function(allowStatic,allowExact){var oldInType=this.state.inType;this.state.inType=true;var nodeStart=this.startNode();var node=void 0;var propertyKey=void 0;var isStatic=false;nodeStart.callProperties=[];nodeStart.properties=[];nodeStart.indexers=[];var endDelim=void 0;var exact=void 0;if(allowExact&&this.match(types.braceBarL)){this.expect(types.braceBarL);endDelim=types.braceBarR;exact=true;}else{this.expect(types.braceL);endDelim=types.braceR;exact=false;}nodeStart.exact=exact;while(!this.match(endDelim)){var optional=false;var startPos=this.state.start;var startLoc=this.state.startLoc;node=this.startNode();if(allowStatic&&this.isContextual(\"static\")&&this.lookahead().type!==types.colon){this.next();isStatic=true;}var variancePos=this.state.start;var variance=this.flowParseVariance();if(this.match(types.bracketL)){nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node,isStatic,variance));}else if(this.match(types.parenL)||this.isRelational(\"<\")){if(variance){this.unexpected(variancePos);}nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node,isStatic));}else{propertyKey=this.flowParseObjectPropertyKey();if(this.isRelational(\"<\")||this.match(types.parenL)){// This is a method property\nif(variance){this.unexpected(variancePos);}nodeStart.properties.push(this.flowParseObjectTypeMethod(startPos,startLoc,isStatic,propertyKey));}else{if(this.eat(types.question)){optional=true;}node.key=propertyKey;node.value=this.flowParseTypeInitialiser();node.optional=optional;node.static=isStatic;node.variance=variance;this.flowObjectTypeSemicolon();nodeStart.properties.push(this.finishNode(node,\"ObjectTypeProperty\"));}}isStatic=false;}this.expect(endDelim);var out=this.finishNode(nodeStart,\"ObjectTypeAnnotation\");this.state.inType=oldInType;return out;};pp$8.flowObjectTypeSemicolon=function(){if(!this.eat(types.semi)&&!this.eat(types.comma)&&!this.match(types.braceR)&&!this.match(types.braceBarR)){this.unexpected();}};pp$8.flowParseQualifiedTypeIdentifier=function(startPos,startLoc,id){startPos=startPos||this.state.start;startLoc=startLoc||this.state.startLoc;var node=id||this.parseIdentifier();while(this.eat(types.dot)){var node2=this.startNodeAt(startPos,startLoc);node2.qualification=node;node2.id=this.parseIdentifier();node=this.finishNode(node2,\"QualifiedTypeIdentifier\");}return node;};pp$8.flowParseGenericType=function(startPos,startLoc,id){var node=this.startNodeAt(startPos,startLoc);node.typeParameters=null;node.id=this.flowParseQualifiedTypeIdentifier(startPos,startLoc,id);if(this.isRelational(\"<\")){node.typeParameters=this.flowParseTypeParameterInstantiation();}return this.finishNode(node,\"GenericTypeAnnotation\");};pp$8.flowParseTypeofType=function(){var node=this.startNode();this.expect(types._typeof);node.argument=this.flowParsePrimaryType();return this.finishNode(node,\"TypeofTypeAnnotation\");};pp$8.flowParseTupleType=function(){var node=this.startNode();node.types=[];this.expect(types.bracketL);// We allow trailing commas\nwhile(this.state.pos<this.input.length&&!this.match(types.bracketR)){node.types.push(this.flowParseType());if(this.match(types.bracketR))break;this.expect(types.comma);}this.expect(types.bracketR);return this.finishNode(node,\"TupleTypeAnnotation\");};pp$8.flowParseFunctionTypeParam=function(){var name=null;var optional=false;var typeAnnotation=null;var node=this.startNode();var lh=this.lookahead();if(lh.type===types.colon||lh.type===types.question){name=this.parseIdentifier();if(this.eat(types.question)){optional=true;}typeAnnotation=this.flowParseTypeInitialiser();}else{typeAnnotation=this.flowParseType();}node.name=name;node.optional=optional;node.typeAnnotation=typeAnnotation;return this.finishNode(node,\"FunctionTypeParam\");};pp$8.reinterpretTypeAsFunctionTypeParam=function(type){var node=this.startNodeAt(type.start,type.loc);node.name=null;node.optional=false;node.typeAnnotation=type;return this.finishNode(node,\"FunctionTypeParam\");};pp$8.flowParseFunctionTypeParams=function(){var params=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var ret={params:params,rest:null};while(!this.match(types.parenR)&&!this.match(types.ellipsis)){ret.params.push(this.flowParseFunctionTypeParam());if(!this.match(types.parenR)){this.expect(types.comma);}}if(this.eat(types.ellipsis)){ret.rest=this.flowParseFunctionTypeParam();}return ret;};pp$8.flowIdentToTypeAnnotation=function(startPos,startLoc,node,id){switch(id.name){case\"any\":return this.finishNode(node,\"AnyTypeAnnotation\");case\"void\":return this.finishNode(node,\"VoidTypeAnnotation\");case\"bool\":case\"boolean\":return this.finishNode(node,\"BooleanTypeAnnotation\");case\"mixed\":return this.finishNode(node,\"MixedTypeAnnotation\");case\"empty\":return this.finishNode(node,\"EmptyTypeAnnotation\");case\"number\":return this.finishNode(node,\"NumberTypeAnnotation\");case\"string\":return this.finishNode(node,\"StringTypeAnnotation\");default:return this.flowParseGenericType(startPos,startLoc,id);}};// The parsing of types roughly parallels the parsing of expressions, and\n// primary types are kind of like primary expressions...they're the\n// primitives with which other types are constructed.\npp$8.flowParsePrimaryType=function(){var startPos=this.state.start;var startLoc=this.state.startLoc;var node=this.startNode();var tmp=void 0;var type=void 0;var isGroupedType=false;var oldNoAnonFunctionType=this.state.noAnonFunctionType;switch(this.state.type){case types.name:return this.flowIdentToTypeAnnotation(startPos,startLoc,node,this.parseIdentifier());case types.braceL:return this.flowParseObjectType(false,false);case types.braceBarL:return this.flowParseObjectType(false,true);case types.bracketL:return this.flowParseTupleType();case types.relational:if(this.state.value===\"<\"){node.typeParameters=this.flowParseTypeParameterDeclaration();this.expect(types.parenL);tmp=this.flowParseFunctionTypeParams();node.params=tmp.params;node.rest=tmp.rest;this.expect(types.parenR);this.expect(types.arrow);node.returnType=this.flowParseType();return this.finishNode(node,\"FunctionTypeAnnotation\");}break;case types.parenL:this.next();// Check to see if this is actually a grouped type\nif(!this.match(types.parenR)&&!this.match(types.ellipsis)){if(this.match(types.name)){var token=this.lookahead().type;isGroupedType=token!==types.question&&token!==types.colon;}else{isGroupedType=true;}}if(isGroupedType){this.state.noAnonFunctionType=false;type=this.flowParseType();this.state.noAnonFunctionType=oldNoAnonFunctionType;// A `,` or a `) =>` means this is an anonymous function type\nif(this.state.noAnonFunctionType||!(this.match(types.comma)||this.match(types.parenR)&&this.lookahead().type===types.arrow)){this.expect(types.parenR);return type;}else{// Eat a comma if there is one\nthis.eat(types.comma);}}if(type){tmp=this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);}else{tmp=this.flowParseFunctionTypeParams();}node.params=tmp.params;node.rest=tmp.rest;this.expect(types.parenR);this.expect(types.arrow);node.returnType=this.flowParseType();node.typeParameters=null;return this.finishNode(node,\"FunctionTypeAnnotation\");case types.string:return this.parseLiteral(this.state.value,\"StringLiteralTypeAnnotation\");case types._true:case types._false:node.value=this.match(types._true);this.next();return this.finishNode(node,\"BooleanLiteralTypeAnnotation\");case types.plusMin:if(this.state.value===\"-\"){this.next();if(!this.match(types.num))this.unexpected(null,\"Unexpected token, expected number\");return this.parseLiteral(-this.state.value,\"NumericLiteralTypeAnnotation\",node.start,node.loc.start);}this.unexpected();case types.num:return this.parseLiteral(this.state.value,\"NumericLiteralTypeAnnotation\");case types._null:node.value=this.match(types._null);this.next();return this.finishNode(node,\"NullLiteralTypeAnnotation\");case types._this:node.value=this.match(types._this);this.next();return this.finishNode(node,\"ThisTypeAnnotation\");case types.star:this.next();return this.finishNode(node,\"ExistentialTypeParam\");default:if(this.state.type.keyword===\"typeof\"){return this.flowParseTypeofType();}}this.unexpected();};pp$8.flowParsePostfixType=function(){var startPos=this.state.start,startLoc=this.state.startLoc;var type=this.flowParsePrimaryType();while(!this.canInsertSemicolon()&&this.match(types.bracketL)){var node=this.startNodeAt(startPos,startLoc);node.elementType=type;this.expect(types.bracketL);this.expect(types.bracketR);type=this.finishNode(node,\"ArrayTypeAnnotation\");}return type;};pp$8.flowParsePrefixType=function(){var node=this.startNode();if(this.eat(types.question)){node.typeAnnotation=this.flowParsePrefixType();return this.finishNode(node,\"NullableTypeAnnotation\");}else{return this.flowParsePostfixType();}};pp$8.flowParseAnonFunctionWithoutParens=function(){var param=this.flowParsePrefixType();if(!this.state.noAnonFunctionType&&this.eat(types.arrow)){var node=this.startNodeAt(param.start,param.loc);node.params=[this.reinterpretTypeAsFunctionTypeParam(param)];node.rest=null;node.returnType=this.flowParseType();node.typeParameters=null;return this.finishNode(node,\"FunctionTypeAnnotation\");}return param;};pp$8.flowParseIntersectionType=function(){var node=this.startNode();this.eat(types.bitwiseAND);var type=this.flowParseAnonFunctionWithoutParens();node.types=[type];while(this.eat(types.bitwiseAND)){node.types.push(this.flowParseAnonFunctionWithoutParens());}return node.types.length===1?type:this.finishNode(node,\"IntersectionTypeAnnotation\");};pp$8.flowParseUnionType=function(){var node=this.startNode();this.eat(types.bitwiseOR);var type=this.flowParseIntersectionType();node.types=[type];while(this.eat(types.bitwiseOR)){node.types.push(this.flowParseIntersectionType());}return node.types.length===1?type:this.finishNode(node,\"UnionTypeAnnotation\");};pp$8.flowParseType=function(){var oldInType=this.state.inType;this.state.inType=true;var type=this.flowParseUnionType();this.state.inType=oldInType;return type;};pp$8.flowParseTypeAnnotation=function(){var node=this.startNode();node.typeAnnotation=this.flowParseTypeInitialiser();return this.finishNode(node,\"TypeAnnotation\");};pp$8.flowParseTypeAndPredicateAnnotation=function(){var node=this.startNode();var _flowParseTypeAndPred2=this.flowParseTypeAndPredicateInitialiser();node.typeAnnotation=_flowParseTypeAndPred2[0];node.predicate=_flowParseTypeAndPred2[1];return this.finishNode(node,\"TypeAnnotation\");};pp$8.flowParseTypeAnnotatableIdentifier=function(){var ident=this.flowParseRestrictedIdentifier();if(this.match(types.colon)){ident.typeAnnotation=this.flowParseTypeAnnotation();this.finishNode(ident,ident.type);}return ident;};pp$8.typeCastToParameter=function(node){node.expression.typeAnnotation=node.typeAnnotation;return this.finishNodeAt(node.expression,node.expression.type,node.typeAnnotation.end,node.typeAnnotation.loc.end);};pp$8.flowParseVariance=function(){var variance=null;if(this.match(types.plusMin)){if(this.state.value===\"+\"){variance=\"plus\";}else if(this.state.value===\"-\"){variance=\"minus\";}this.next();}return variance;};var flowPlugin=function flowPlugin(instance){// plain function return types: function name(): string {}\ninstance.extend(\"parseFunctionBody\",function(inner){return function(node,allowExpression){if(this.match(types.colon)&&!allowExpression){// if allowExpression is true then we're parsing an arrow function and if\n// there's a return type then it's been handled elsewhere\nnode.returnType=this.flowParseTypeAndPredicateAnnotation();}return inner.call(this,node,allowExpression);};});// interfaces\ninstance.extend(\"parseStatement\",function(inner){return function(declaration,topLevel){// strict mode handling of `interface` since it's a reserved word\nif(this.state.strict&&this.match(types.name)&&this.state.value===\"interface\"){var node=this.startNode();this.next();return this.flowParseInterface(node);}else{return inner.call(this,declaration,topLevel);}};});// declares, interfaces and type aliases\ninstance.extend(\"parseExpressionStatement\",function(inner){return function(node,expr){if(expr.type===\"Identifier\"){if(expr.name===\"declare\"){if(this.match(types._class)||this.match(types.name)||this.match(types._function)||this.match(types._var)){return this.flowParseDeclare(node);}}else if(this.match(types.name)){if(expr.name===\"interface\"){return this.flowParseInterface(node);}else if(expr.name===\"type\"){return this.flowParseTypeAlias(node);}}}return inner.call(this,node,expr);};});// export type\ninstance.extend(\"shouldParseExportDeclaration\",function(inner){return function(){return this.isContextual(\"type\")||this.isContextual(\"interface\")||inner.call(this);};});instance.extend(\"parseConditional\",function(inner){return function(expr,noIn,startPos,startLoc,refNeedsArrowPos){// only do the expensive clone if there is a question mark\n// and if we come from inside parens\nif(refNeedsArrowPos&&this.match(types.question)){var state=this.state.clone();try{return inner.call(this,expr,noIn,startPos,startLoc);}catch(err){if(err instanceof SyntaxError){this.state=state;refNeedsArrowPos.start=err.pos||this.state.start;return expr;}else{// istanbul ignore next: no such error is expected\nthrow err;}}}return inner.call(this,expr,noIn,startPos,startLoc);};});instance.extend(\"parseParenItem\",function(inner){return function(node,startLoc,startPos){node=inner.call(this,node,startLoc,startPos);if(this.eat(types.question)){node.optional=true;}if(this.match(types.colon)){var typeCastNode=this.startNodeAt(startLoc,startPos);typeCastNode.expression=node;typeCastNode.typeAnnotation=this.flowParseTypeAnnotation();return this.finishNode(typeCastNode,\"TypeCastExpression\");}return node;};});instance.extend(\"parseExport\",function(inner){return function(node){node=inner.call(this,node);if(node.type===\"ExportNamedDeclaration\"){node.exportKind=node.exportKind||\"value\";}return node;};});instance.extend(\"parseExportDeclaration\",function(inner){return function(node){if(this.isContextual(\"type\")){node.exportKind=\"type\";var declarationNode=this.startNode();this.next();if(this.match(types.braceL)){// export type { foo, bar };\nnode.specifiers=this.parseExportSpecifiers();this.parseExportFrom(node);return null;}else{// export type Foo = Bar;\nreturn this.flowParseTypeAlias(declarationNode);}}else if(this.isContextual(\"interface\")){node.exportKind=\"type\";var _declarationNode=this.startNode();this.next();return this.flowParseInterface(_declarationNode);}else{return inner.call(this,node);}};});instance.extend(\"parseClassId\",function(inner){return function(node){inner.apply(this,arguments);if(this.isRelational(\"<\")){node.typeParameters=this.flowParseTypeParameterDeclaration();}};});// don't consider `void` to be a keyword as then it'll use the void token type\n// and set startExpr\ninstance.extend(\"isKeyword\",function(inner){return function(name){if(this.state.inType&&name===\"void\"){return false;}else{return inner.call(this,name);}};});// ensure that inside flow types, we bypass the jsx parser plugin\ninstance.extend(\"readToken\",function(inner){return function(code){if(this.state.inType&&(code===62||code===60)){return this.finishOp(types.relational,1);}else{return inner.call(this,code);}};});// don't lex any token as a jsx one inside a flow type\ninstance.extend(\"jsx_readToken\",function(inner){return function(){if(!this.state.inType)return inner.call(this);};});instance.extend(\"toAssignable\",function(inner){return function(node,isBinding,contextDescription){if(node.type===\"TypeCastExpression\"){return inner.call(this,this.typeCastToParameter(node),isBinding,contextDescription);}else{return inner.call(this,node,isBinding,contextDescription);}};});// turn type casts that we found in function parameter head into type annotated params\ninstance.extend(\"toAssignableList\",function(inner){return function(exprList,isBinding,contextDescription){for(var i=0;i<exprList.length;i++){var expr=exprList[i];if(expr&&expr.type===\"TypeCastExpression\"){exprList[i]=this.typeCastToParameter(expr);}}return inner.call(this,exprList,isBinding,contextDescription);};});// this is a list of nodes, from something like a call expression, we need to filter the\n// type casts that we've found that are illegal in this context\ninstance.extend(\"toReferencedList\",function(){return function(exprList){for(var i=0;i<exprList.length;i++){var expr=exprList[i];if(expr&&expr._exprListItem&&expr.type===\"TypeCastExpression\"){this.raise(expr.start,\"Unexpected type cast\");}}return exprList;};});// parse an item inside a expression list eg. `(NODE, NODE)` where NODE represents\n// the position where this function is called\ninstance.extend(\"parseExprListItem\",function(inner){return function(){var container=this.startNode();for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}var node=inner.call.apply(inner,[this].concat(args));if(this.match(types.colon)){container._exprListItem=true;container.expression=node;container.typeAnnotation=this.flowParseTypeAnnotation();return this.finishNode(container,\"TypeCastExpression\");}else{return node;}};});instance.extend(\"checkLVal\",function(inner){return function(node){if(node.type!==\"TypeCastExpression\"){return inner.apply(this,arguments);}};});// parse class property type annotations\ninstance.extend(\"parseClassProperty\",function(inner){return function(node){delete node.variancePos;if(this.match(types.colon)){node.typeAnnotation=this.flowParseTypeAnnotation();}return inner.call(this,node);};});// determine whether or not we're currently in the position where a class property would appear\ninstance.extend(\"isClassProperty\",function(inner){return function(){return this.match(types.colon)||inner.call(this);};});// parse type parameters for class methods\ninstance.extend(\"parseClassMethod\",function(inner){return function(classBody,method){if(method.variance){this.unexpected(method.variancePos);}delete method.variance;delete method.variancePos;if(this.isRelational(\"<\")){method.typeParameters=this.flowParseTypeParameterDeclaration();}for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++){args[_key2-2]=arguments[_key2];}inner.call.apply(inner,[this,classBody,method].concat(args));};});// parse a the super class type parameters and implements\ninstance.extend(\"parseClassSuper\",function(inner){return function(node,isStatement){inner.call(this,node,isStatement);if(node.superClass&&this.isRelational(\"<\")){node.superTypeParameters=this.flowParseTypeParameterInstantiation();}if(this.isContextual(\"implements\")){this.next();var implemented=node.implements=[];do{var _node=this.startNode();_node.id=this.parseIdentifier();if(this.isRelational(\"<\")){_node.typeParameters=this.flowParseTypeParameterInstantiation();}else{_node.typeParameters=null;}implemented.push(this.finishNode(_node,\"ClassImplements\"));}while(this.eat(types.comma));}};});instance.extend(\"parsePropertyName\",function(inner){return function(node){var variancePos=this.state.start;var variance=this.flowParseVariance();var key=inner.call(this,node);node.variance=variance;node.variancePos=variancePos;return key;};});// parse type parameters for object method shorthand\ninstance.extend(\"parseObjPropValue\",function(inner){return function(prop){if(prop.variance){this.unexpected(prop.variancePos);}delete prop.variance;delete prop.variancePos;var typeParameters=void 0;// method shorthand\nif(this.isRelational(\"<\")){typeParameters=this.flowParseTypeParameterDeclaration();if(!this.match(types.parenL))this.unexpected();}inner.apply(this,arguments);// add typeParameters if we found them\nif(typeParameters){(prop.value||prop).typeParameters=typeParameters;}};});instance.extend(\"parseAssignableListItemTypes\",function(){return function(param){if(this.eat(types.question)){param.optional=true;}if(this.match(types.colon)){param.typeAnnotation=this.flowParseTypeAnnotation();}this.finishNode(param,param.type);return param;};});instance.extend(\"parseMaybeDefault\",function(inner){return function(){for(var _len3=arguments.length,args=Array(_len3),_key3=0;_key3<_len3;_key3++){args[_key3]=arguments[_key3];}var node=inner.apply(this,args);if(node.type===\"AssignmentPattern\"&&node.typeAnnotation&&node.right.start<node.typeAnnotation.start){this.raise(node.typeAnnotation.start,\"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`\");}return node;};});// parse typeof and type imports\ninstance.extend(\"parseImportSpecifiers\",function(inner){return function(node){node.importKind=\"value\";var kind=null;if(this.match(types._typeof)){kind=\"typeof\";}else if(this.isContextual(\"type\")){kind=\"type\";}if(kind){var lh=this.lookahead();if(lh.type===types.name&&lh.value!==\"from\"||lh.type===types.braceL||lh.type===types.star){this.next();node.importKind=kind;}}inner.call(this,node);};});// parse import-type/typeof shorthand\ninstance.extend(\"parseImportSpecifier\",function(){return function(node){var specifier=this.startNode();var firstIdentLoc=this.state.start;var firstIdent=this.parseIdentifier(true);var specifierTypeKind=null;if(firstIdent.name===\"type\"){specifierTypeKind=\"type\";}else if(firstIdent.name===\"typeof\"){specifierTypeKind=\"typeof\";}var isBinding=false;if(this.isContextual(\"as\")){var as_ident=this.parseIdentifier(true);if(specifierTypeKind!==null&&!this.match(types.name)&&!this.state.type.keyword){// `import {type as ,` or `import {type as }`\nspecifier.imported=as_ident;specifier.importKind=specifierTypeKind;specifier.local=as_ident.__clone();}else{// `import {type as foo`\nspecifier.imported=firstIdent;specifier.importKind=null;specifier.local=this.parseIdentifier();}}else if(specifierTypeKind!==null&&(this.match(types.name)||this.state.type.keyword)){// `import {type foo`\nspecifier.imported=this.parseIdentifier(true);specifier.importKind=specifierTypeKind;if(this.eatContextual(\"as\")){specifier.local=this.parseIdentifier();}else{isBinding=true;specifier.local=specifier.imported.__clone();}}else{isBinding=true;specifier.imported=firstIdent;specifier.importKind=null;specifier.local=specifier.imported.__clone();}if((node.importKind===\"type\"||node.importKind===\"typeof\")&&(specifier.importKind===\"type\"||specifier.importKind===\"typeof\")){this.raise(firstIdentLoc,\"`The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements`\");}if(isBinding)this.checkReservedWord(specifier.local.name,specifier.start,true,true);this.checkLVal(specifier.local,true,undefined,\"import specifier\");node.specifiers.push(this.finishNode(specifier,\"ImportSpecifier\"));};});// parse function type parameters - function foo<T>() {}\ninstance.extend(\"parseFunctionParams\",function(inner){return function(node){if(this.isRelational(\"<\")){node.typeParameters=this.flowParseTypeParameterDeclaration();}inner.call(this,node);};});// parse flow type annotations on variable declarator heads - let foo: string = bar\ninstance.extend(\"parseVarHead\",function(inner){return function(decl){inner.call(this,decl);if(this.match(types.colon)){decl.id.typeAnnotation=this.flowParseTypeAnnotation();this.finishNode(decl.id,decl.id.type);}};});// parse the return type of an async arrow function - let foo = (async (): number => {});\ninstance.extend(\"parseAsyncArrowFromCallExpression\",function(inner){return function(node,call){if(this.match(types.colon)){var oldNoAnonFunctionType=this.state.noAnonFunctionType;this.state.noAnonFunctionType=true;node.returnType=this.flowParseTypeAnnotation();this.state.noAnonFunctionType=oldNoAnonFunctionType;}return inner.call(this,node,call);};});// todo description\ninstance.extend(\"shouldParseAsyncArrow\",function(inner){return function(){return this.match(types.colon)||inner.call(this);};});// We need to support type parameter declarations for arrow functions. This\n// is tricky. There are three situations we need to handle\n//\n// 1. This is either JSX or an arrow function. We'll try JSX first. If that\n//    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n//    error.\n// 2. This is an arrow function. We'll parse the type parameter declaration,\n//    parse the rest, make sure the rest is an arrow function, and go from\n//    there\n// 3. This is neither. Just call the inner function\ninstance.extend(\"parseMaybeAssign\",function(inner){return function(){var jsxError=null;for(var _len4=arguments.length,args=Array(_len4),_key4=0;_key4<_len4;_key4++){args[_key4]=arguments[_key4];}if(types.jsxTagStart&&this.match(types.jsxTagStart)){var state=this.state.clone();try{return inner.apply(this,args);}catch(err){if(err instanceof SyntaxError){this.state=state;jsxError=err;}else{// istanbul ignore next: no such error is expected\nthrow err;}}}// Need to push something onto the context to stop\n// the JSX plugin from messing with the tokens\nthis.state.context.push(types$1.parenExpression);if(jsxError!=null||this.isRelational(\"<\")){var arrowExpression=void 0;var typeParameters=void 0;try{typeParameters=this.flowParseTypeParameterDeclaration();arrowExpression=inner.apply(this,args);arrowExpression.typeParameters=typeParameters;arrowExpression.start=typeParameters.start;arrowExpression.loc.start=typeParameters.loc.start;}catch(err){throw jsxError||err;}if(arrowExpression.type===\"ArrowFunctionExpression\"){return arrowExpression;}else if(jsxError!=null){throw jsxError;}else{this.raise(typeParameters.start,\"Expected an arrow function after this type parameter declaration\");}}this.state.context.pop();return inner.apply(this,args);};});// handle return types for arrow functions\ninstance.extend(\"parseArrow\",function(inner){return function(node){if(this.match(types.colon)){var state=this.state.clone();try{var oldNoAnonFunctionType=this.state.noAnonFunctionType;this.state.noAnonFunctionType=true;var returnType=this.flowParseTypeAndPredicateAnnotation();this.state.noAnonFunctionType=oldNoAnonFunctionType;if(this.canInsertSemicolon())this.unexpected();if(!this.match(types.arrow))this.unexpected();// assign after it is clear it is an arrow\nnode.returnType=returnType;}catch(err){if(err instanceof SyntaxError){this.state=state;}else{// istanbul ignore next: no such error is expected\nthrow err;}}}return inner.call(this,node);};});instance.extend(\"shouldParseArrow\",function(inner){return function(){return this.match(types.colon)||inner.call(this);};});instance.extend(\"isClassMutatorStarter\",function(inner){return function(){if(this.isRelational(\"<\")){return true;}else{return inner.call(this);}};});};// Adapted from String.fromcodepoint to export the function without modifying String\n/*! https://mths.be/fromcodepoint v0.2.1 by @mathias */// The MIT License (MIT)\n// Copyright (c) Mathias Bynens\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and\n// associated documentation files (the \"Software\"), to deal in the Software without restriction,\n// including without limitation the rights to use, copy, modify, merge, publish, distribute,\n// sublicense, and/or sell 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 all copies or\n// substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT\n// NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN 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 OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nvar fromCodePoint=_fromCodePoint2.default;if(!fromCodePoint){var stringFromCharCode=String.fromCharCode;var floor=Math.floor;fromCodePoint=function fromCodePoint(){var MAX_SIZE=0x4000;var codeUnits=[];var highSurrogate=void 0;var lowSurrogate=void 0;var index=-1;var length=arguments.length;if(!length){return\"\";}var result=\"\";while(++index<length){var codePoint=Number(arguments[index]);if(!isFinite(codePoint)||// `NaN`, `+Infinity`, or `-Infinity`\ncodePoint<0||// not a valid Unicode code point\ncodePoint>0x10FFFF||// not a valid Unicode code point\nfloor(codePoint)!=codePoint// not an integer\n){throw RangeError(\"Invalid code point: \"+codePoint);}if(codePoint<=0xFFFF){// BMP code point\ncodeUnits.push(codePoint);}else{// Astral code point; split in surrogate halves\n// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\ncodePoint-=0x10000;highSurrogate=(codePoint>>10)+0xD800;lowSurrogate=codePoint%0x400+0xDC00;codeUnits.push(highSurrogate,lowSurrogate);}if(index+1==length||codeUnits.length>MAX_SIZE){result+=stringFromCharCode.apply(null,codeUnits);codeUnits.length=0;}}return result;};}var fromCodePoint$1=fromCodePoint;var XHTMLEntities={quot:\"\\\"\",amp:\"&\",apos:\"'\",lt:\"<\",gt:\">\",nbsp:\"\\xA0\",iexcl:\"\\xA1\",cent:\"\\xA2\",pound:\"\\xA3\",curren:\"\\xA4\",yen:\"\\xA5\",brvbar:\"\\xA6\",sect:\"\\xA7\",uml:\"\\xA8\",copy:\"\\xA9\",ordf:\"\\xAA\",laquo:\"\\xAB\",not:\"\\xAC\",shy:\"\\xAD\",reg:\"\\xAE\",macr:\"\\xAF\",deg:\"\\xB0\",plusmn:\"\\xB1\",sup2:\"\\xB2\",sup3:\"\\xB3\",acute:\"\\xB4\",micro:\"\\xB5\",para:\"\\xB6\",middot:\"\\xB7\",cedil:\"\\xB8\",sup1:\"\\xB9\",ordm:\"\\xBA\",raquo:\"\\xBB\",frac14:\"\\xBC\",frac12:\"\\xBD\",frac34:\"\\xBE\",iquest:\"\\xBF\",Agrave:\"\\xC0\",Aacute:\"\\xC1\",Acirc:\"\\xC2\",Atilde:\"\\xC3\",Auml:\"\\xC4\",Aring:\"\\xC5\",AElig:\"\\xC6\",Ccedil:\"\\xC7\",Egrave:\"\\xC8\",Eacute:\"\\xC9\",Ecirc:\"\\xCA\",Euml:\"\\xCB\",Igrave:\"\\xCC\",Iacute:\"\\xCD\",Icirc:\"\\xCE\",Iuml:\"\\xCF\",ETH:\"\\xD0\",Ntilde:\"\\xD1\",Ograve:\"\\xD2\",Oacute:\"\\xD3\",Ocirc:\"\\xD4\",Otilde:\"\\xD5\",Ouml:\"\\xD6\",times:\"\\xD7\",Oslash:\"\\xD8\",Ugrave:\"\\xD9\",Uacute:\"\\xDA\",Ucirc:\"\\xDB\",Uuml:\"\\xDC\",Yacute:\"\\xDD\",THORN:\"\\xDE\",szlig:\"\\xDF\",agrave:\"\\xE0\",aacute:\"\\xE1\",acirc:\"\\xE2\",atilde:\"\\xE3\",auml:\"\\xE4\",aring:\"\\xE5\",aelig:\"\\xE6\",ccedil:\"\\xE7\",egrave:\"\\xE8\",eacute:\"\\xE9\",ecirc:\"\\xEA\",euml:\"\\xEB\",igrave:\"\\xEC\",iacute:\"\\xED\",icirc:\"\\xEE\",iuml:\"\\xEF\",eth:\"\\xF0\",ntilde:\"\\xF1\",ograve:\"\\xF2\",oacute:\"\\xF3\",ocirc:\"\\xF4\",otilde:\"\\xF5\",ouml:\"\\xF6\",divide:\"\\xF7\",oslash:\"\\xF8\",ugrave:\"\\xF9\",uacute:\"\\xFA\",ucirc:\"\\xFB\",uuml:\"\\xFC\",yacute:\"\\xFD\",thorn:\"\\xFE\",yuml:\"\\xFF\",OElig:\"\\u0152\",oelig:\"\\u0153\",Scaron:\"\\u0160\",scaron:\"\\u0161\",Yuml:\"\\u0178\",fnof:\"\\u0192\",circ:\"\\u02C6\",tilde:\"\\u02DC\",Alpha:\"\\u0391\",Beta:\"\\u0392\",Gamma:\"\\u0393\",Delta:\"\\u0394\",Epsilon:\"\\u0395\",Zeta:\"\\u0396\",Eta:\"\\u0397\",Theta:\"\\u0398\",Iota:\"\\u0399\",Kappa:\"\\u039A\",Lambda:\"\\u039B\",Mu:\"\\u039C\",Nu:\"\\u039D\",Xi:\"\\u039E\",Omicron:\"\\u039F\",Pi:\"\\u03A0\",Rho:\"\\u03A1\",Sigma:\"\\u03A3\",Tau:\"\\u03A4\",Upsilon:\"\\u03A5\",Phi:\"\\u03A6\",Chi:\"\\u03A7\",Psi:\"\\u03A8\",Omega:\"\\u03A9\",alpha:\"\\u03B1\",beta:\"\\u03B2\",gamma:\"\\u03B3\",delta:\"\\u03B4\",epsilon:\"\\u03B5\",zeta:\"\\u03B6\",eta:\"\\u03B7\",theta:\"\\u03B8\",iota:\"\\u03B9\",kappa:\"\\u03BA\",lambda:\"\\u03BB\",mu:\"\\u03BC\",nu:\"\\u03BD\",xi:\"\\u03BE\",omicron:\"\\u03BF\",pi:\"\\u03C0\",rho:\"\\u03C1\",sigmaf:\"\\u03C2\",sigma:\"\\u03C3\",tau:\"\\u03C4\",upsilon:\"\\u03C5\",phi:\"\\u03C6\",chi:\"\\u03C7\",psi:\"\\u03C8\",omega:\"\\u03C9\",thetasym:\"\\u03D1\",upsih:\"\\u03D2\",piv:\"\\u03D6\",ensp:\"\\u2002\",emsp:\"\\u2003\",thinsp:\"\\u2009\",zwnj:\"\\u200C\",zwj:\"\\u200D\",lrm:\"\\u200E\",rlm:\"\\u200F\",ndash:\"\\u2013\",mdash:\"\\u2014\",lsquo:\"\\u2018\",rsquo:\"\\u2019\",sbquo:\"\\u201A\",ldquo:\"\\u201C\",rdquo:\"\\u201D\",bdquo:\"\\u201E\",dagger:\"\\u2020\",Dagger:\"\\u2021\",bull:\"\\u2022\",hellip:\"\\u2026\",permil:\"\\u2030\",prime:\"\\u2032\",Prime:\"\\u2033\",lsaquo:\"\\u2039\",rsaquo:\"\\u203A\",oline:\"\\u203E\",frasl:\"\\u2044\",euro:\"\\u20AC\",image:\"\\u2111\",weierp:\"\\u2118\",real:\"\\u211C\",trade:\"\\u2122\",alefsym:\"\\u2135\",larr:\"\\u2190\",uarr:\"\\u2191\",rarr:\"\\u2192\",darr:\"\\u2193\",harr:\"\\u2194\",crarr:\"\\u21B5\",lArr:\"\\u21D0\",uArr:\"\\u21D1\",rArr:\"\\u21D2\",dArr:\"\\u21D3\",hArr:\"\\u21D4\",forall:\"\\u2200\",part:\"\\u2202\",exist:\"\\u2203\",empty:\"\\u2205\",nabla:\"\\u2207\",isin:\"\\u2208\",notin:\"\\u2209\",ni:\"\\u220B\",prod:\"\\u220F\",sum:\"\\u2211\",minus:\"\\u2212\",lowast:\"\\u2217\",radic:\"\\u221A\",prop:\"\\u221D\",infin:\"\\u221E\",ang:\"\\u2220\",and:\"\\u2227\",or:\"\\u2228\",cap:\"\\u2229\",cup:\"\\u222A\",\"int\":\"\\u222B\",there4:\"\\u2234\",sim:\"\\u223C\",cong:\"\\u2245\",asymp:\"\\u2248\",ne:\"\\u2260\",equiv:\"\\u2261\",le:\"\\u2264\",ge:\"\\u2265\",sub:\"\\u2282\",sup:\"\\u2283\",nsub:\"\\u2284\",sube:\"\\u2286\",supe:\"\\u2287\",oplus:\"\\u2295\",otimes:\"\\u2297\",perp:\"\\u22A5\",sdot:\"\\u22C5\",lceil:\"\\u2308\",rceil:\"\\u2309\",lfloor:\"\\u230A\",rfloor:\"\\u230B\",lang:\"\\u2329\",rang:\"\\u232A\",loz:\"\\u25CA\",spades:\"\\u2660\",clubs:\"\\u2663\",hearts:\"\\u2665\",diams:\"\\u2666\"};var HEX_NUMBER=/^[\\da-fA-F]+$/;var DECIMAL_NUMBER=/^\\d+$/;types$1.j_oTag=new TokContext(\"<tag\",false);types$1.j_cTag=new TokContext(\"</tag\",false);types$1.j_expr=new TokContext(\"<tag>...</tag>\",true,true);types.jsxName=new TokenType(\"jsxName\");types.jsxText=new TokenType(\"jsxText\",{beforeExpr:true});types.jsxTagStart=new TokenType(\"jsxTagStart\",{startsExpr:true});types.jsxTagEnd=new TokenType(\"jsxTagEnd\");types.jsxTagStart.updateContext=function(){this.state.context.push(types$1.j_expr);// treat as beginning of JSX expression\nthis.state.context.push(types$1.j_oTag);// start opening tag context\nthis.state.exprAllowed=false;};types.jsxTagEnd.updateContext=function(prevType){var out=this.state.context.pop();if(out===types$1.j_oTag&&prevType===types.slash||out===types$1.j_cTag){this.state.context.pop();this.state.exprAllowed=this.curContext()===types$1.j_expr;}else{this.state.exprAllowed=true;}};var pp$9=Parser.prototype;// Reads inline JSX contents token.\npp$9.jsxReadToken=function(){var out=\"\";var chunkStart=this.state.pos;for(;;){if(this.state.pos>=this.input.length){this.raise(this.state.start,\"Unterminated JSX contents\");}var ch=this.input.charCodeAt(this.state.pos);switch(ch){case 60:// \"<\"\ncase 123:// \"{\"\nif(this.state.pos===this.state.start){if(ch===60&&this.state.exprAllowed){++this.state.pos;return this.finishToken(types.jsxTagStart);}return this.getTokenFromCode(ch);}out+=this.input.slice(chunkStart,this.state.pos);return this.finishToken(types.jsxText,out);case 38:// \"&\"\nout+=this.input.slice(chunkStart,this.state.pos);out+=this.jsxReadEntity();chunkStart=this.state.pos;break;default:if(isNewLine(ch)){out+=this.input.slice(chunkStart,this.state.pos);out+=this.jsxReadNewLine(true);chunkStart=this.state.pos;}else{++this.state.pos;}}}};pp$9.jsxReadNewLine=function(normalizeCRLF){var ch=this.input.charCodeAt(this.state.pos);var out=void 0;++this.state.pos;if(ch===13&&this.input.charCodeAt(this.state.pos)===10){++this.state.pos;out=normalizeCRLF?\"\\n\":\"\\r\\n\";}else{out=String.fromCharCode(ch);}++this.state.curLine;this.state.lineStart=this.state.pos;return out;};pp$9.jsxReadString=function(quote){var out=\"\";var chunkStart=++this.state.pos;for(;;){if(this.state.pos>=this.input.length){this.raise(this.state.start,\"Unterminated string constant\");}var ch=this.input.charCodeAt(this.state.pos);if(ch===quote)break;if(ch===38){// \"&\"\nout+=this.input.slice(chunkStart,this.state.pos);out+=this.jsxReadEntity();chunkStart=this.state.pos;}else if(isNewLine(ch)){out+=this.input.slice(chunkStart,this.state.pos);out+=this.jsxReadNewLine(false);chunkStart=this.state.pos;}else{++this.state.pos;}}out+=this.input.slice(chunkStart,this.state.pos++);return this.finishToken(types.string,out);};pp$9.jsxReadEntity=function(){var str=\"\";var count=0;var entity=void 0;var ch=this.input[this.state.pos];var startPos=++this.state.pos;while(this.state.pos<this.input.length&&count++<10){ch=this.input[this.state.pos++];if(ch===\";\"){if(str[0]===\"#\"){if(str[1]===\"x\"){str=str.substr(2);if(HEX_NUMBER.test(str))entity=fromCodePoint$1(parseInt(str,16));}else{str=str.substr(1);if(DECIMAL_NUMBER.test(str))entity=fromCodePoint$1(parseInt(str,10));}}else{entity=XHTMLEntities[str];}break;}str+=ch;}if(!entity){this.state.pos=startPos;return\"&\";}return entity;};// Read a JSX identifier (valid tag or attribute name).\n//\n// Optimized version since JSX identifiers can\"t contain\n// escape characters and so can be read as single slice.\n// Also assumes that first character was already checked\n// by isIdentifierStart in readToken.\npp$9.jsxReadWord=function(){var ch=void 0;var start=this.state.pos;do{ch=this.input.charCodeAt(++this.state.pos);}while(isIdentifierChar(ch)||ch===45);// \"-\"\nreturn this.finishToken(types.jsxName,this.input.slice(start,this.state.pos));};// Transforms JSX element name to string.\nfunction getQualifiedJSXName(object){if(object.type===\"JSXIdentifier\"){return object.name;}if(object.type===\"JSXNamespacedName\"){return object.namespace.name+\":\"+object.name.name;}if(object.type===\"JSXMemberExpression\"){return getQualifiedJSXName(object.object)+\".\"+getQualifiedJSXName(object.property);}}// Parse next token as JSX identifier\npp$9.jsxParseIdentifier=function(){var node=this.startNode();if(this.match(types.jsxName)){node.name=this.state.value;}else if(this.state.type.keyword){node.name=this.state.type.keyword;}else{this.unexpected();}this.next();return this.finishNode(node,\"JSXIdentifier\");};// Parse namespaced identifier.\npp$9.jsxParseNamespacedName=function(){var startPos=this.state.start;var startLoc=this.state.startLoc;var name=this.jsxParseIdentifier();if(!this.eat(types.colon))return name;var node=this.startNodeAt(startPos,startLoc);node.namespace=name;node.name=this.jsxParseIdentifier();return this.finishNode(node,\"JSXNamespacedName\");};// Parses element name in any form - namespaced, member\n// or single identifier.\npp$9.jsxParseElementName=function(){var startPos=this.state.start;var startLoc=this.state.startLoc;var node=this.jsxParseNamespacedName();while(this.eat(types.dot)){var newNode=this.startNodeAt(startPos,startLoc);newNode.object=node;newNode.property=this.jsxParseIdentifier();node=this.finishNode(newNode,\"JSXMemberExpression\");}return node;};// Parses any type of JSX attribute value.\npp$9.jsxParseAttributeValue=function(){var node=void 0;switch(this.state.type){case types.braceL:node=this.jsxParseExpressionContainer();if(node.expression.type===\"JSXEmptyExpression\"){this.raise(node.start,\"JSX attributes must only be assigned a non-empty expression\");}else{return node;}case types.jsxTagStart:case types.string:node=this.parseExprAtom();node.extra=null;return node;default:this.raise(this.state.start,\"JSX value should be either an expression or a quoted JSX text\");}};// JSXEmptyExpression is unique type since it doesn't actually parse anything,\n// and so it should start at the end of last read token (left brace) and finish\n// at the beginning of the next one (right brace).\npp$9.jsxParseEmptyExpression=function(){var node=this.startNodeAt(this.state.lastTokEnd,this.state.lastTokEndLoc);return this.finishNodeAt(node,\"JSXEmptyExpression\",this.state.start,this.state.startLoc);};// Parse JSX spread child\npp$9.jsxParseSpreadChild=function(){var node=this.startNode();this.expect(types.braceL);this.expect(types.ellipsis);node.expression=this.parseExpression();this.expect(types.braceR);return this.finishNode(node,\"JSXSpreadChild\");};// Parses JSX expression enclosed into curly brackets.\npp$9.jsxParseExpressionContainer=function(){var node=this.startNode();this.next();if(this.match(types.braceR)){node.expression=this.jsxParseEmptyExpression();}else{node.expression=this.parseExpression();}this.expect(types.braceR);return this.finishNode(node,\"JSXExpressionContainer\");};// Parses following JSX attribute name-value pair.\npp$9.jsxParseAttribute=function(){var node=this.startNode();if(this.eat(types.braceL)){this.expect(types.ellipsis);node.argument=this.parseMaybeAssign();this.expect(types.braceR);return this.finishNode(node,\"JSXSpreadAttribute\");}node.name=this.jsxParseNamespacedName();node.value=this.eat(types.eq)?this.jsxParseAttributeValue():null;return this.finishNode(node,\"JSXAttribute\");};// Parses JSX opening tag starting after \"<\".\npp$9.jsxParseOpeningElementAt=function(startPos,startLoc){var node=this.startNodeAt(startPos,startLoc);node.attributes=[];node.name=this.jsxParseElementName();while(!this.match(types.slash)&&!this.match(types.jsxTagEnd)){node.attributes.push(this.jsxParseAttribute());}node.selfClosing=this.eat(types.slash);this.expect(types.jsxTagEnd);return this.finishNode(node,\"JSXOpeningElement\");};// Parses JSX closing tag starting after \"</\".\npp$9.jsxParseClosingElementAt=function(startPos,startLoc){var node=this.startNodeAt(startPos,startLoc);node.name=this.jsxParseElementName();this.expect(types.jsxTagEnd);return this.finishNode(node,\"JSXClosingElement\");};// Parses entire JSX element, including it\"s opening tag\n// (starting after \"<\"), attributes, contents and closing tag.\npp$9.jsxParseElementAt=function(startPos,startLoc){var node=this.startNodeAt(startPos,startLoc);var children=[];var openingElement=this.jsxParseOpeningElementAt(startPos,startLoc);var closingElement=null;if(!openingElement.selfClosing){contents:for(;;){switch(this.state.type){case types.jsxTagStart:startPos=this.state.start;startLoc=this.state.startLoc;this.next();if(this.eat(types.slash)){closingElement=this.jsxParseClosingElementAt(startPos,startLoc);break contents;}children.push(this.jsxParseElementAt(startPos,startLoc));break;case types.jsxText:children.push(this.parseExprAtom());break;case types.braceL:if(this.lookahead().type===types.ellipsis){children.push(this.jsxParseSpreadChild());}else{children.push(this.jsxParseExpressionContainer());}break;// istanbul ignore next - should never happen\ndefault:this.unexpected();}}if(getQualifiedJSXName(closingElement.name)!==getQualifiedJSXName(openingElement.name)){this.raise(closingElement.start,\"Expected corresponding JSX closing tag for <\"+getQualifiedJSXName(openingElement.name)+\">\");}}node.openingElement=openingElement;node.closingElement=closingElement;node.children=children;if(this.match(types.relational)&&this.state.value===\"<\"){this.raise(this.state.start,\"Adjacent JSX elements must be wrapped in an enclosing tag\");}return this.finishNode(node,\"JSXElement\");};// Parses entire JSX element from current position.\npp$9.jsxParseElement=function(){var startPos=this.state.start;var startLoc=this.state.startLoc;this.next();return this.jsxParseElementAt(startPos,startLoc);};var jsxPlugin=function jsxPlugin(instance){instance.extend(\"parseExprAtom\",function(inner){return function(refShortHandDefaultPos){if(this.match(types.jsxText)){var node=this.parseLiteral(this.state.value,\"JSXText\");// https://github.com/babel/babel/issues/2078\nnode.extra=null;return node;}else if(this.match(types.jsxTagStart)){return this.jsxParseElement();}else{return inner.call(this,refShortHandDefaultPos);}};});instance.extend(\"readToken\",function(inner){return function(code){if(this.state.inPropertyName)return inner.call(this,code);var context=this.curContext();if(context===types$1.j_expr){return this.jsxReadToken();}if(context===types$1.j_oTag||context===types$1.j_cTag){if(isIdentifierStart(code)){return this.jsxReadWord();}if(code===62){++this.state.pos;return this.finishToken(types.jsxTagEnd);}if((code===34||code===39)&&context===types$1.j_oTag){return this.jsxReadString(code);}}if(code===60&&this.state.exprAllowed){++this.state.pos;return this.finishToken(types.jsxTagStart);}return inner.call(this,code);};});instance.extend(\"updateContext\",function(inner){return function(prevType){if(this.match(types.braceL)){var curContext=this.curContext();if(curContext===types$1.j_oTag){this.state.context.push(types$1.braceExpression);}else if(curContext===types$1.j_expr){this.state.context.push(types$1.templateQuasi);}else{inner.call(this,prevType);}this.state.exprAllowed=true;}else if(this.match(types.slash)&&prevType===types.jsxTagStart){this.state.context.length-=2;// do not consider JSX expr -> JSX open tag -> ... anymore\nthis.state.context.push(types$1.j_cTag);// reconsider as closing tag context\nthis.state.exprAllowed=false;}else{return inner.call(this,prevType);}};});};plugins.estree=estreePlugin;plugins.flow=flowPlugin;plugins.jsx=jsxPlugin;function parse(input,options){return new Parser(options,input).parse();}function parseExpression(input,options){var parser=new Parser(options,input);if(parser.options.strictMode){parser.state.strict=true;}return parser.getExpression();}exports.parse=parse;exports.parseExpression=parseExpression;exports.tokTypes=types;},{}],75:[function(require,module,exports){},{}],76:[function(require,module,exports){(function(process){'use strict';var escapeStringRegexp=require(\"escape-string-regexp\");var ansiStyles=require(\"ansi-styles\");var stripAnsi=require(\"strip-ansi\");var hasAnsi=require(\"has-ansi\");var supportsColor=require(\"supports-color\");var defineProps=_defineProperties2.default;var isSimpleWindowsTerm=process.platform==='win32'&&!/^xterm/i.test(process.env.TERM);function Chalk(options){// detect mode if not set manually\nthis.enabled=!options||options.enabled===undefined?supportsColor:options.enabled;}// use bright blue on Windows as the normal blue color is illegible\nif(isSimpleWindowsTerm){ansiStyles.blue.open=\"\\x1B[94m\";}var styles=function(){var ret={};(0,_keys4.default)(ansiStyles).forEach(function(key){ansiStyles[key].closeRe=new RegExp(escapeStringRegexp(ansiStyles[key].close),'g');ret[key]={get:function get(){return build.call(this,this._styles.concat(key));}};});return ret;}();var proto=defineProps(function chalk(){},styles);function build(_styles){var builder=function builder(){return applyStyle.apply(builder,arguments);};builder._styles=_styles;builder.enabled=this.enabled;// __proto__ is used because we must return a function, but there is\n// no way to create a function with a different prototype.\n/* eslint-disable no-proto */builder.__proto__=proto;return builder;}function applyStyle(){// support varags, but simply cast to string in case there's only one arg\nvar args=arguments;var argsLen=args.length;var str=argsLen!==0&&String(arguments[0]);if(argsLen>1){// don't slice `arguments`, it prevents v8 optimizations\nfor(var a=1;a<argsLen;a++){str+=' '+args[a];}}if(!this.enabled||!str){return str;}var nestedStyles=this._styles;var i=nestedStyles.length;// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n// see https://github.com/chalk/chalk/issues/58\n// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\nvar originalDim=ansiStyles.dim.open;if(isSimpleWindowsTerm&&(nestedStyles.indexOf('gray')!==-1||nestedStyles.indexOf('grey')!==-1)){ansiStyles.dim.open='';}while(i--){var code=ansiStyles[nestedStyles[i]];// Replace any instances already present with a re-opening code\n// otherwise only the part of the string until said closing code\n// will be colored, and the rest will simply be 'plain'.\nstr=code.open+str.replace(code.closeRe,code.open)+code.close;}// Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue.\nansiStyles.dim.open=originalDim;return str;}function init(){var ret={};(0,_keys4.default)(styles).forEach(function(name){ret[name]={get:function get(){return build.call(this,[name]);}};});return ret;}defineProps(Chalk.prototype,init());module.exports=new Chalk();module.exports.styles=ansiStyles;module.exports.hasColor=hasAnsi;module.exports.stripColor=stripAnsi;module.exports.supportsColor=supportsColor;}).call(this,require(\"_process\"));},{\"_process\":594,\"ansi-styles\":6,\"escape-string-regexp\":254,\"has-ansi\":375,\"strip-ansi\":595,\"supports-color\":77}],77:[function(require,module,exports){(function(process){'use strict';var argv=process.argv;var terminator=argv.indexOf('--');var hasFlag=function hasFlag(flag){flag='--'+flag;var pos=argv.indexOf(flag);return pos!==-1&&(terminator!==-1?pos<terminator:true);};module.exports=function(){if('FORCE_COLOR'in process.env){return true;}if(hasFlag('no-color')||hasFlag('no-colors')||hasFlag('color=false')){return false;}if(hasFlag('color')||hasFlag('colors')||hasFlag('color=true')||hasFlag('color=always')){return true;}if(process.stdout&&!process.stdout.isTTY){return false;}if(process.platform==='win32'){return true;}if('COLORTERM'in process.env){return true;}if(process.env.TERM==='dumb'){return false;}if(/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)){return true;}return false;}();}).call(this,require(\"_process\"));},{\"_process\":594}],78:[function(require,module,exports){require(\"../modules/web.dom.iterable\");require(\"../modules/es6.string.iterator\");module.exports=require(\"../modules/core.get-iterator\");},{\"../modules/core.get-iterator\":163,\"../modules/es6.string.iterator\":170,\"../modules/web.dom.iterable\":176}],79:[function(require,module,exports){var core=require(\"../../modules/_core\"),$JSON=core.JSON||(core.JSON={stringify:_stringify4.default});module.exports=function stringify(it){// eslint-disable-line no-unused-vars\nreturn $JSON.stringify.apply($JSON,arguments);};},{\"../../modules/_core\":104}],80:[function(require,module,exports){require(\"../modules/es6.object.to-string\");require(\"../modules/es6.string.iterator\");require(\"../modules/web.dom.iterable\");require(\"../modules/es6.map\");require(\"../modules/es7.map.to-json\");module.exports=require(\"../modules/_core\").Map;},{\"../modules/_core\":104,\"../modules/es6.map\":165,\"../modules/es6.object.to-string\":169,\"../modules/es6.string.iterator\":170,\"../modules/es7.map.to-json\":173,\"../modules/web.dom.iterable\":176}],81:[function(require,module,exports){require(\"../../modules/es6.number.max-safe-integer\");module.exports=0x1fffffffffffff;},{\"../../modules/es6.number.max-safe-integer\":166}],82:[function(require,module,exports){require(\"../../modules/es6.object.create\");var $Object=require(\"../../modules/_core\").Object;module.exports=function create(P,D){return $Object.create(P,D);};},{\"../../modules/_core\":104,\"../../modules/es6.object.create\":167}],83:[function(require,module,exports){require(\"../../modules/es6.symbol\");module.exports=require(\"../../modules/_core\").Object.getOwnPropertySymbols;},{\"../../modules/_core\":104,\"../../modules/es6.symbol\":171}],84:[function(require,module,exports){require(\"../../modules/es6.object.keys\");module.exports=require(\"../../modules/_core\").Object.keys;},{\"../../modules/_core\":104,\"../../modules/es6.object.keys\":168}],85:[function(require,module,exports){require(\"../../modules/es6.symbol\");module.exports=require(\"../../modules/_core\").Symbol['for'];},{\"../../modules/_core\":104,\"../../modules/es6.symbol\":171}],86:[function(require,module,exports){require(\"../../modules/es6.symbol\");require(\"../../modules/es6.object.to-string\");require(\"../../modules/es7.symbol.async-iterator\");require(\"../../modules/es7.symbol.observable\");module.exports=require(\"../../modules/_core\").Symbol;},{\"../../modules/_core\":104,\"../../modules/es6.object.to-string\":169,\"../../modules/es6.symbol\":171,\"../../modules/es7.symbol.async-iterator\":174,\"../../modules/es7.symbol.observable\":175}],87:[function(require,module,exports){require(\"../../modules/es6.string.iterator\");require(\"../../modules/web.dom.iterable\");module.exports=require(\"../../modules/_wks-ext\").f('iterator');},{\"../../modules/_wks-ext\":160,\"../../modules/es6.string.iterator\":170,\"../../modules/web.dom.iterable\":176}],88:[function(require,module,exports){require(\"../modules/es6.object.to-string\");require(\"../modules/web.dom.iterable\");require(\"../modules/es6.weak-map\");module.exports=require(\"../modules/_core\").WeakMap;},{\"../modules/_core\":104,\"../modules/es6.object.to-string\":169,\"../modules/es6.weak-map\":172,\"../modules/web.dom.iterable\":176}],89:[function(require,module,exports){module.exports=function(it){if(typeof it!='function')throw TypeError(it+' is not a function!');return it;};},{}],90:[function(require,module,exports){module.exports=function(){/* empty */};},{}],91:[function(require,module,exports){module.exports=function(it,Constructor,name,forbiddenField){if(!(it instanceof Constructor)||forbiddenField!==undefined&&forbiddenField in it){throw TypeError(name+': incorrect invocation!');}return it;};},{}],92:[function(require,module,exports){var isObject=require(\"./_is-object\");module.exports=function(it){if(!isObject(it))throw TypeError(it+' is not an object!');return it;};},{\"./_is-object\":122}],93:[function(require,module,exports){var forOf=require(\"./_for-of\");module.exports=function(iter,ITERATOR){var result=[];forOf(iter,false,result.push,result,ITERATOR);return result;};},{\"./_for-of\":113}],94:[function(require,module,exports){// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject=require(\"./_to-iobject\"),toLength=require(\"./_to-length\"),toIndex=require(\"./_to-index\");module.exports=function(IS_INCLUDES){return function($this,el,fromIndex){var O=toIObject($this),length=toLength(O.length),index=toIndex(fromIndex,length),value;// Array#includes uses SameValueZero equality algorithm\nif(IS_INCLUDES&&el!=el)while(length>index){value=O[index++];if(value!=value)return true;// Array#toIndex ignores holes, Array#includes - not\n}else for(;length>index;index++){if(IS_INCLUDES||index in O){if(O[index]===el)return IS_INCLUDES||index||0;}}return!IS_INCLUDES&&-1;};};},{\"./_to-index\":152,\"./_to-iobject\":154,\"./_to-length\":155}],95:[function(require,module,exports){// 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\"),IObject=require(\"./_iobject\"),toObject=require(\"./_to-object\"),toLength=require(\"./_to-length\"),asc=require(\"./_array-species-create\");module.exports=function(TYPE,$create){var IS_MAP=TYPE==1,IS_FILTER=TYPE==2,IS_SOME=TYPE==3,IS_EVERY=TYPE==4,IS_FIND_INDEX=TYPE==6,NO_HOLES=TYPE==5||IS_FIND_INDEX,create=$create||asc;return function($this,callbackfn,that){var O=toObject($this),self=IObject(O),f=ctx(callbackfn,that,3),length=toLength(self.length),index=0,result=IS_MAP?create($this,length):IS_FILTER?create($this,0):undefined,val,res;for(;length>index;index++){if(NO_HOLES||index in self){val=self[index];res=f(val,index,O);if(TYPE){if(IS_MAP)result[index]=res;// map\nelse if(res)switch(TYPE){case 3:return true;// some\ncase 5:return val;// find\ncase 6:return index;// findIndex\ncase 2:result.push(val);// filter\n}else if(IS_EVERY)return false;// every\n}}}return IS_FIND_INDEX?-1:IS_SOME||IS_EVERY?IS_EVERY:result;};};},{\"./_array-species-create\":97,\"./_ctx\":105,\"./_iobject\":119,\"./_to-length\":155,\"./_to-object\":156}],96:[function(require,module,exports){var isObject=require(\"./_is-object\"),isArray=require(\"./_is-array\"),SPECIES=require(\"./_wks\")('species');module.exports=function(original){var C;if(isArray(original)){C=original.constructor;// cross-realm fallback\nif(typeof C=='function'&&(C===Array||isArray(C.prototype)))C=undefined;if(isObject(C)){C=C[SPECIES];if(C===null)C=undefined;}}return C===undefined?Array:C;};},{\"./_is-array\":121,\"./_is-object\":122,\"./_wks\":161}],97:[function(require,module,exports){// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor=require(\"./_array-species-constructor\");module.exports=function(original,length){return new(speciesConstructor(original))(length);};},{\"./_array-species-constructor\":96}],98:[function(require,module,exports){// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof=require(\"./_cof\"),TAG=require(\"./_wks\")('toStringTag')// ES3 wrong here\n,ARG=cof(function(){return arguments;}())=='Arguments';// fallback for IE11 Script Access Denied error\nvar tryGet=function tryGet(it,key){try{return it[key];}catch(e){/* empty */}};module.exports=function(it){var O,T,B;return it===undefined?'Undefined':it===null?'Null'// @@toStringTag case\n:typeof(T=tryGet(O=Object(it),TAG))=='string'?T// builtinTag case\n:ARG?cof(O)// ES3 arguments fallback\n:(B=cof(O))=='Object'&&typeof O.callee=='function'?'Arguments':B;};},{\"./_cof\":99,\"./_wks\":161}],99:[function(require,module,exports){var toString={}.toString;module.exports=function(it){return toString.call(it).slice(8,-1);};},{}],100:[function(require,module,exports){'use strict';var dP=require(\"./_object-dp\").f,create=require(\"./_object-create\"),redefineAll=require(\"./_redefine-all\"),ctx=require(\"./_ctx\"),anInstance=require(\"./_an-instance\"),defined=require(\"./_defined\"),forOf=require(\"./_for-of\"),$iterDefine=require(\"./_iter-define\"),step=require(\"./_iter-step\"),setSpecies=require(\"./_set-species\"),DESCRIPTORS=require(\"./_descriptors\"),fastKey=require(\"./_meta\").fastKey,SIZE=DESCRIPTORS?'_s':'size';var getEntry=function getEntry(that,key){// fast case\nvar index=fastKey(key),entry;if(index!=='F')return that._i[index];// frozen object case\nfor(entry=that._f;entry;entry=entry.n){if(entry.k==key)return entry;}};module.exports={getConstructor:function getConstructor(wrapper,NAME,IS_MAP,ADDER){var C=wrapper(function(that,iterable){anInstance(that,C,NAME,'_i');that._i=create(null);// index\nthat._f=undefined;// first entry\nthat._l=undefined;// last entry\nthat[SIZE]=0;// size\nif(iterable!=undefined)forOf(iterable,IS_MAP,that[ADDER],that);});redefineAll(C.prototype,{// 23.1.3.1 Map.prototype.clear()\n// 23.2.3.2 Set.prototype.clear()\nclear:function clear(){for(var that=this,data=that._i,entry=that._f;entry;entry=entry.n){entry.r=true;if(entry.p)entry.p=entry.p.n=undefined;delete data[entry.i];}that._f=that._l=undefined;that[SIZE]=0;},// 23.1.3.3 Map.prototype.delete(key)\n// 23.2.3.4 Set.prototype.delete(value)\n'delete':function _delete(key){var that=this,entry=getEntry(that,key);if(entry){var next=entry.n,prev=entry.p;delete that._i[entry.i];entry.r=true;if(prev)prev.n=next;if(next)next.p=prev;if(that._f==entry)that._f=next;if(that._l==entry)that._l=prev;that[SIZE]--;}return!!entry;},// 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n// 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\nforEach:function forEach(callbackfn/*, that = undefined */){anInstance(this,C,'forEach');var f=ctx(callbackfn,arguments.length>1?arguments[1]:undefined,3),entry;while(entry=entry?entry.n:this._f){f(entry.v,entry.k,this);// revert to the last existing entry\nwhile(entry&&entry.r){entry=entry.p;}}},// 23.1.3.7 Map.prototype.has(key)\n// 23.2.3.7 Set.prototype.has(value)\nhas:function has(key){return!!getEntry(this,key);}});if(DESCRIPTORS)dP(C.prototype,'size',{get:function get(){return defined(this[SIZE]);}});return C;},def:function def(that,key,value){var entry=getEntry(that,key),prev,index;// change existing entry\nif(entry){entry.v=value;// create new entry\n}else{that._l=entry={i:index=fastKey(key,true),// <- index\nk:key,// <- key\nv:value,// <- value\np:prev=that._l,// <- previous entry\nn:undefined,// <- next entry\nr:false// <- removed\n};if(!that._f)that._f=entry;if(prev)prev.n=entry;that[SIZE]++;// add to index\nif(index!=='F')that._i[index]=entry;}return that;},getEntry:getEntry,setStrong:function setStrong(C,NAME,IS_MAP){// 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){this._t=iterated;// target\nthis._k=kind;// kind\nthis._l=undefined;// previous\n},function(){var that=this,kind=that._k,entry=that._l;// revert to the last existing entry\nwhile(entry&&entry.r){entry=entry.p;}// get next entry\nif(!that._t||!(that._l=entry=entry?entry.n:that._t._f)){// or finish the iteration\nthat._t=undefined;return step(1);}// return step by kind\nif(kind=='keys')return step(0,entry.k);if(kind=='values')return step(0,entry.v);return step(0,[entry.k,entry.v]);},IS_MAP?'entries':'values',!IS_MAP,true);// add [@@species], 23.1.2.2, 23.2.2.2\nsetSpecies(NAME);}};},{\"./_an-instance\":91,\"./_ctx\":105,\"./_defined\":106,\"./_descriptors\":107,\"./_for-of\":113,\"./_iter-define\":125,\"./_iter-step\":126,\"./_meta\":130,\"./_object-create\":132,\"./_object-dp\":133,\"./_redefine-all\":145,\"./_set-species\":147}],101:[function(require,module,exports){// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof=require(\"./_classof\"),from=require(\"./_array-from-iterable\");module.exports=function(NAME){return function toJSON(){if(classof(this)!=NAME)throw TypeError(NAME+\"#toJSON isn't generic\");return from(this);};};},{\"./_array-from-iterable\":93,\"./_classof\":98}],102:[function(require,module,exports){'use strict';var redefineAll=require(\"./_redefine-all\"),getWeak=require(\"./_meta\").getWeak,anObject=require(\"./_an-object\"),isObject=require(\"./_is-object\"),anInstance=require(\"./_an-instance\"),forOf=require(\"./_for-of\"),createArrayMethod=require(\"./_array-methods\"),$has=require(\"./_has\"),arrayFind=createArrayMethod(5),arrayFindIndex=createArrayMethod(6),id=0;// fallback for uncaught frozen keys\nvar uncaughtFrozenStore=function uncaughtFrozenStore(that){return that._l||(that._l=new UncaughtFrozenStore());};var UncaughtFrozenStore=function UncaughtFrozenStore(){this.a=[];};var findUncaughtFrozen=function findUncaughtFrozen(store,key){return arrayFind(store.a,function(it){return it[0]===key;});};UncaughtFrozenStore.prototype={get:function get(key){var entry=findUncaughtFrozen(this,key);if(entry)return entry[1];},has:function has(key){return!!findUncaughtFrozen(this,key);},set:function set(key,value){var entry=findUncaughtFrozen(this,key);if(entry)entry[1]=value;else this.a.push([key,value]);},'delete':function _delete(key){var index=arrayFindIndex(this.a,function(it){return it[0]===key;});if(~index)this.a.splice(index,1);return!!~index;}};module.exports={getConstructor:function getConstructor(wrapper,NAME,IS_MAP,ADDER){var C=wrapper(function(that,iterable){anInstance(that,C,NAME,'_i');that._i=id++;// collection id\nthat._l=undefined;// leak store for uncaught frozen objects\nif(iterable!=undefined)forOf(iterable,IS_MAP,that[ADDER],that);});redefineAll(C.prototype,{// 23.3.3.2 WeakMap.prototype.delete(key)\n// 23.4.3.3 WeakSet.prototype.delete(value)\n'delete':function _delete(key){if(!isObject(key))return false;var data=getWeak(key);if(data===true)return uncaughtFrozenStore(this)['delete'](key);return data&&$has(data,this._i)&&delete data[this._i];},// 23.3.3.4 WeakMap.prototype.has(key)\n// 23.4.3.4 WeakSet.prototype.has(value)\nhas:function has(key){if(!isObject(key))return false;var data=getWeak(key);if(data===true)return uncaughtFrozenStore(this).has(key);return data&&$has(data,this._i);}});return C;},def:function def(that,key,value){var data=getWeak(anObject(key),true);if(data===true)uncaughtFrozenStore(that).set(key,value);else data[that._i]=value;return that;},ufstore:uncaughtFrozenStore};},{\"./_an-instance\":91,\"./_an-object\":92,\"./_array-methods\":95,\"./_for-of\":113,\"./_has\":115,\"./_is-object\":122,\"./_meta\":130,\"./_redefine-all\":145}],103:[function(require,module,exports){'use strict';var global=require(\"./_global\"),$export=require(\"./_export\"),meta=require(\"./_meta\"),fails=require(\"./_fails\"),hide=require(\"./_hide\"),redefineAll=require(\"./_redefine-all\"),forOf=require(\"./_for-of\"),anInstance=require(\"./_an-instance\"),isObject=require(\"./_is-object\"),setToStringTag=require(\"./_set-to-string-tag\"),dP=require(\"./_object-dp\").f,each=require(\"./_array-methods\")(0),DESCRIPTORS=require(\"./_descriptors\");module.exports=function(NAME,wrapper,methods,common,IS_MAP,IS_WEAK){var Base=global[NAME],C=Base,ADDER=IS_MAP?'set':'add',proto=C&&C.prototype,O={};if(!DESCRIPTORS||typeof C!='function'||!(IS_WEAK||proto.forEach&&!fails(function(){new C().entries().next();}))){// create collection constructor\nC=common.getConstructor(wrapper,NAME,IS_MAP,ADDER);redefineAll(C.prototype,methods);meta.NEED=true;}else{C=wrapper(function(target,iterable){anInstance(target,C,NAME,'_c');target._c=new Base();if(iterable!=undefined)forOf(iterable,IS_MAP,target[ADDER],target);});each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','),function(KEY){var IS_ADDER=KEY=='add'||KEY=='set';if(KEY in proto&&!(IS_WEAK&&KEY=='clear'))hide(C.prototype,KEY,function(a,b){anInstance(this,C,KEY);if(!IS_ADDER&&IS_WEAK&&!isObject(a))return KEY=='get'?undefined:false;var result=this._c[KEY](a===0?0:a,b);return IS_ADDER?this:result;});});if('size'in proto)dP(C.prototype,'size',{get:function get(){return this._c.size;}});}setToStringTag(C,NAME);O[NAME]=C;$export($export.G+$export.W+$export.F,O);if(!IS_WEAK)common.setStrong(C,NAME,IS_MAP);return C;};},{\"./_an-instance\":91,\"./_array-methods\":95,\"./_descriptors\":107,\"./_export\":111,\"./_fails\":112,\"./_for-of\":113,\"./_global\":114,\"./_hide\":116,\"./_is-object\":122,\"./_meta\":130,\"./_object-dp\":133,\"./_redefine-all\":145,\"./_set-to-string-tag\":148}],104:[function(require,module,exports){var core=module.exports={version:'2.4.0'};if(typeof __e=='number')__e=core;// eslint-disable-line no-undef\n},{}],105:[function(require,module,exports){// optional / simple context binding\nvar aFunction=require(\"./_a-function\");module.exports=function(fn,that,length){aFunction(fn);if(that===undefined)return fn;switch(length){case 1:return function(a){return fn.call(that,a);};case 2:return function(a,b){return fn.call(that,a,b);};case 3:return function(a,b,c){return fn.call(that,a,b,c);};}return function()/* ...args */{return fn.apply(that,arguments);};};},{\"./_a-function\":89}],106:[function(require,module,exports){// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports=function(it){if(it==undefined)throw TypeError(\"Can't call method on  \"+it);return it;};},{}],107:[function(require,module,exports){// Thank's IE8 for his funny defineProperty\nmodule.exports=!require(\"./_fails\")(function(){return Object.defineProperty({},'a',{get:function get(){return 7;}}).a!=7;});},{\"./_fails\":112}],108:[function(require,module,exports){var isObject=require(\"./_is-object\"),document=require(\"./_global\").document// in old IE typeof document.createElement is 'object'\n,is=isObject(document)&&isObject(document.createElement);module.exports=function(it){return is?document.createElement(it):{};};},{\"./_global\":114,\"./_is-object\":122}],109:[function(require,module,exports){// IE 8- don't enum bug keys\nmodule.exports='constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(',');},{}],110:[function(require,module,exports){// all enumerable object keys, includes symbols\nvar getKeys=require(\"./_object-keys\"),gOPS=require(\"./_object-gops\"),pIE=require(\"./_object-pie\");module.exports=function(it){var result=getKeys(it),getSymbols=gOPS.f;if(getSymbols){var symbols=getSymbols(it),isEnum=pIE.f,i=0,key;while(symbols.length>i){if(isEnum.call(it,key=symbols[i++]))result.push(key);}}return result;};},{\"./_object-gops\":138,\"./_object-keys\":141,\"./_object-pie\":142}],111:[function(require,module,exports){var global=require(\"./_global\"),core=require(\"./_core\"),ctx=require(\"./_ctx\"),hide=require(\"./_hide\"),PROTOTYPE='prototype';var $export=function $export(type,name,source){var IS_FORCED=type&$export.F,IS_GLOBAL=type&$export.G,IS_STATIC=type&$export.S,IS_PROTO=type&$export.P,IS_BIND=type&$export.B,IS_WRAP=type&$export.W,exports=IS_GLOBAL?core:core[name]||(core[name]={}),expProto=exports[PROTOTYPE],target=IS_GLOBAL?global:IS_STATIC?global[name]:(global[name]||{})[PROTOTYPE],key,own,out;if(IS_GLOBAL)source=name;for(key in source){// contains in native\nown=!IS_FORCED&&target&&target[key]!==undefined;if(own&&key in exports)continue;// export native or passed\nout=own?target[key]:source[key];// prevent global pollution for namespaces\nexports[key]=IS_GLOBAL&&typeof target[key]!='function'?source[key]// bind timers to global for call from export context\n:IS_BIND&&own?ctx(out,global)// wrap global constructors for prevent change them in library\n:IS_WRAP&&target[key]==out?function(C){var F=function F(a,b,c){if(this instanceof C){switch(arguments.length){case 0:return new C();case 1:return new C(a);case 2:return new C(a,b);}return new C(a,b,c);}return C.apply(this,arguments);};F[PROTOTYPE]=C[PROTOTYPE];return F;// make static versions for prototype methods\n}(out):IS_PROTO&&typeof out=='function'?ctx(Function.call,out):out;// export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\nif(IS_PROTO){(exports.virtual||(exports.virtual={}))[key]=out;// export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\nif(type&$export.R&&expProto&&!expProto[key])hide(expProto,key,out);}}};// 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;},{\"./_core\":104,\"./_ctx\":105,\"./_global\":114,\"./_hide\":116}],112:[function(require,module,exports){module.exports=function(exec){try{return!!exec();}catch(e){return true;}};},{}],113:[function(require,module,exports){var ctx=require(\"./_ctx\"),call=require(\"./_iter-call\"),isArrayIter=require(\"./_is-array-iter\"),anObject=require(\"./_an-object\"),toLength=require(\"./_to-length\"),getIterFn=require(\"./core.get-iterator-method\"),BREAK={},RETURN={};var exports=module.exports=function(iterable,entries,fn,that,ITERATOR){var iterFn=ITERATOR?function(){return iterable;}:getIterFn(iterable),f=ctx(fn,that,entries?2:1),index=0,length,step,iterator,result;if(typeof iterFn!='function')throw TypeError(iterable+' is not iterable!');// fast case for arrays with default iterator\nif(isArrayIter(iterFn))for(length=toLength(iterable.length);length>index;index++){result=entries?f(anObject(step=iterable[index])[0],step[1]):f(iterable[index]);if(result===BREAK||result===RETURN)return result;}else for(iterator=iterFn.call(iterable);!(step=iterator.next()).done;){result=call(iterator,f,step.value,entries);if(result===BREAK||result===RETURN)return result;}};exports.BREAK=BREAK;exports.RETURN=RETURN;},{\"./_an-object\":92,\"./_ctx\":105,\"./_is-array-iter\":120,\"./_iter-call\":123,\"./_to-length\":155,\"./core.get-iterator-method\":162}],114:[function(require,module,exports){// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global=module.exports=typeof window!='undefined'&&window.Math==Math?window:typeof self!='undefined'&&self.Math==Math?self:Function('return this')();if(typeof __g=='number')__g=global;// eslint-disable-line no-undef\n},{}],115:[function(require,module,exports){var hasOwnProperty={}.hasOwnProperty;module.exports=function(it,key){return hasOwnProperty.call(it,key);};},{}],116:[function(require,module,exports){var dP=require(\"./_object-dp\"),createDesc=require(\"./_property-desc\");module.exports=require(\"./_descriptors\")?function(object,key,value){return dP.f(object,key,createDesc(1,value));}:function(object,key,value){object[key]=value;return object;};},{\"./_descriptors\":107,\"./_object-dp\":133,\"./_property-desc\":144}],117:[function(require,module,exports){module.exports=require(\"./_global\").document&&document.documentElement;},{\"./_global\":114}],118:[function(require,module,exports){module.exports=!require(\"./_descriptors\")&&!require(\"./_fails\")(function(){return Object.defineProperty(require(\"./_dom-create\")('div'),'a',{get:function get(){return 7;}}).a!=7;});},{\"./_descriptors\":107,\"./_dom-create\":108,\"./_fails\":112}],119:[function(require,module,exports){// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof=require(\"./_cof\");module.exports=Object('z').propertyIsEnumerable(0)?Object:function(it){return cof(it)=='String'?it.split(''):Object(it);};},{\"./_cof\":99}],120:[function(require,module,exports){// check on default Array iterator\nvar Iterators=require(\"./_iterators\"),ITERATOR=require(\"./_wks\")('iterator'),ArrayProto=Array.prototype;module.exports=function(it){return it!==undefined&&(Iterators.Array===it||ArrayProto[ITERATOR]===it);};},{\"./_iterators\":127,\"./_wks\":161}],121:[function(require,module,exports){// 7.2.2 IsArray(argument)\nvar cof=require(\"./_cof\");module.exports=Array.isArray||function isArray(arg){return cof(arg)=='Array';};},{\"./_cof\":99}],122:[function(require,module,exports){module.exports=function(it){return(typeof it===\"undefined\"?\"undefined\":(0,_typeof6.default)(it))==='object'?it!==null:typeof it==='function';};},{}],123:[function(require,module,exports){// call something on iterator step with safe closing on error\nvar anObject=require(\"./_an-object\");module.exports=function(iterator,fn,value,entries){try{return entries?fn(anObject(value)[0],value[1]):fn(value);// 7.4.6 IteratorClose(iterator, completion)\n}catch(e){var ret=iterator['return'];if(ret!==undefined)anObject(ret.call(iterator));throw e;}};},{\"./_an-object\":92}],124:[function(require,module,exports){'use strict';var create=require(\"./_object-create\"),descriptor=require(\"./_property-desc\"),setToStringTag=require(\"./_set-to-string-tag\"),IteratorPrototype={};// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire(\"./_hide\")(IteratorPrototype,require(\"./_wks\")('iterator'),function(){return this;});module.exports=function(Constructor,NAME,next){Constructor.prototype=create(IteratorPrototype,{next:descriptor(1,next)});setToStringTag(Constructor,NAME+' Iterator');};},{\"./_hide\":116,\"./_object-create\":132,\"./_property-desc\":144,\"./_set-to-string-tag\":148,\"./_wks\":161}],125:[function(require,module,exports){'use strict';var LIBRARY=require(\"./_library\"),$export=require(\"./_export\"),redefine=require(\"./_redefine\"),hide=require(\"./_hide\"),has=require(\"./_has\"),Iterators=require(\"./_iterators\"),$iterCreate=require(\"./_iter-create\"),setToStringTag=require(\"./_set-to-string-tag\"),getPrototypeOf=require(\"./_object-gpo\"),ITERATOR=require(\"./_wks\")('iterator'),BUGGY=!([].keys&&'next'in[].keys())// Safari has buggy iterators w/o `next`\n,FF_ITERATOR='@@iterator',KEYS='keys',VALUES='values';var returnThis=function returnThis(){return this;};module.exports=function(Base,NAME,Constructor,next,DEFAULT,IS_SET,FORCED){$iterCreate(Constructor,NAME,next);var getMethod=function getMethod(kind){if(!BUGGY&&kind in proto)return proto[kind];switch(kind){case KEYS:return function keys(){return new Constructor(this,kind);};case VALUES:return function values(){return new Constructor(this,kind);};}return function entries(){return new Constructor(this,kind);};};var TAG=NAME+' Iterator',DEF_VALUES=DEFAULT==VALUES,VALUES_BUG=false,proto=Base.prototype,$native=proto[ITERATOR]||proto[FF_ITERATOR]||DEFAULT&&proto[DEFAULT],$default=$native||getMethod(DEFAULT),$entries=DEFAULT?!DEF_VALUES?$default:getMethod('entries'):undefined,$anyNative=NAME=='Array'?proto.entries||$native:$native,methods,key,IteratorPrototype;// Fix native\nif($anyNative){IteratorPrototype=getPrototypeOf($anyNative.call(new Base()));if(IteratorPrototype!==Object.prototype){// Set @@toStringTag to native iterators\nsetToStringTag(IteratorPrototype,TAG,true);// fix for some old engines\nif(!LIBRARY&&!has(IteratorPrototype,ITERATOR))hide(IteratorPrototype,ITERATOR,returnThis);}}// fix Array#{values, @@iterator}.name in V8 / FF\nif(DEF_VALUES&&$native&&$native.name!==VALUES){VALUES_BUG=true;$default=function values(){return $native.call(this);};}// Define iterator\nif((!LIBRARY||FORCED)&&(BUGGY||VALUES_BUG||!proto[ITERATOR])){hide(proto,ITERATOR,$default);}// Plug for library\nIterators[NAME]=$default;Iterators[TAG]=returnThis;if(DEFAULT){methods={values:DEF_VALUES?$default:getMethod(VALUES),keys:IS_SET?$default:getMethod(KEYS),entries:$entries};if(FORCED)for(key in methods){if(!(key in proto))redefine(proto,key,methods[key]);}else $export($export.P+$export.F*(BUGGY||VALUES_BUG),NAME,methods);}return methods;};},{\"./_export\":111,\"./_has\":115,\"./_hide\":116,\"./_iter-create\":124,\"./_iterators\":127,\"./_library\":129,\"./_object-gpo\":139,\"./_redefine\":146,\"./_set-to-string-tag\":148,\"./_wks\":161}],126:[function(require,module,exports){module.exports=function(done,value){return{value:value,done:!!done};};},{}],127:[function(require,module,exports){module.exports={};},{}],128:[function(require,module,exports){var getKeys=require(\"./_object-keys\"),toIObject=require(\"./_to-iobject\");module.exports=function(object,el){var O=toIObject(object),keys=getKeys(O),length=keys.length,index=0,key;while(length>index){if(O[key=keys[index++]]===el)return key;}};},{\"./_object-keys\":141,\"./_to-iobject\":154}],129:[function(require,module,exports){module.exports=true;},{}],130:[function(require,module,exports){var META=require(\"./_uid\")('meta'),isObject=require(\"./_is-object\"),has=require(\"./_has\"),setDesc=require(\"./_object-dp\").f,id=0;var isExtensible=_isExtensible2.default||function(){return true;};var FREEZE=!require(\"./_fails\")(function(){return isExtensible((0,_preventExtensions2.default)({}));});var setMeta=function setMeta(it){setDesc(it,META,{value:{i:'O'+ ++id,// object ID\nw:{}// weak collections IDs\n}});};var fastKey=function fastKey(it,create){// return primitive with prefix\nif(!isObject(it))return(typeof it===\"undefined\"?\"undefined\":(0,_typeof6.default)(it))=='symbol'?it:(typeof it=='string'?'S':'P')+it;if(!has(it,META)){// can't set metadata to uncaught frozen object\nif(!isExtensible(it))return'F';// not necessary to add metadata\nif(!create)return'E';// add missing metadata\nsetMeta(it);// return object ID\n}return it[META].i;};var getWeak=function getWeak(it,create){if(!has(it,META)){// can't set metadata to uncaught frozen object\nif(!isExtensible(it))return true;// not necessary to add metadata\nif(!create)return false;// add missing metadata\nsetMeta(it);// return hash weak collections IDs\n}return it[META].w;};// add metadata on freeze-family methods calling\nvar onFreeze=function onFreeze(it){if(FREEZE&&meta.NEED&&isExtensible(it)&&!has(it,META))setMeta(it);return it;};var meta=module.exports={KEY:META,NEED:false,fastKey:fastKey,getWeak:getWeak,onFreeze:onFreeze};},{\"./_fails\":112,\"./_has\":115,\"./_is-object\":122,\"./_object-dp\":133,\"./_uid\":158}],131:[function(require,module,exports){'use strict';// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys=require(\"./_object-keys\"),gOPS=require(\"./_object-gops\"),pIE=require(\"./_object-pie\"),toObject=require(\"./_to-object\"),IObject=require(\"./_iobject\"),$assign=_assign4.default;// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports=!$assign||require(\"./_fails\")(function(){var A={},B={},S=(0,_symbol4.default)(),K='abcdefghijklmnopqrst';A[S]=7;K.split('').forEach(function(k){B[k]=k;});return $assign({},A)[S]!=7||(0,_keys4.default)($assign({},B)).join('')!=K;})?function assign(target,source){// eslint-disable-line no-unused-vars\nvar T=toObject(target),aLen=arguments.length,index=1,getSymbols=gOPS.f,isEnum=pIE.f;while(aLen>index){var S=IObject(arguments[index++]),keys=getSymbols?getKeys(S).concat(getSymbols(S)):getKeys(S),length=keys.length,j=0,key;while(length>j){if(isEnum.call(S,key=keys[j++]))T[key]=S[key];}}return T;}:$assign;},{\"./_fails\":112,\"./_iobject\":119,\"./_object-gops\":138,\"./_object-keys\":141,\"./_object-pie\":142,\"./_to-object\":156}],132:[function(require,module,exports){// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject=require(\"./_an-object\"),dPs=require(\"./_object-dps\"),enumBugKeys=require(\"./_enum-bug-keys\"),IE_PROTO=require(\"./_shared-key\")('IE_PROTO'),Empty=function Empty(){/* empty */},PROTOTYPE='prototype';// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar _createDict=function createDict(){// Thrash, waste and sodomy: IE GC bug\nvar iframe=require(\"./_dom-create\")('iframe'),i=enumBugKeys.length,lt='<',gt='>',iframeDocument;iframe.style.display='none';require(\"./_html\").appendChild(iframe);iframe.src='javascript:';// eslint-disable-line no-script-url\n// createDict = iframe.contentWindow.Object;\n// html.removeChild(iframe);\niframeDocument=iframe.contentWindow.document;iframeDocument.open();iframeDocument.write(lt+'script'+gt+'document.F=Object'+lt+'/script'+gt);iframeDocument.close();_createDict=iframeDocument.F;while(i--){delete _createDict[PROTOTYPE][enumBugKeys[i]];}return _createDict();};module.exports=_create4.default||function create(O,Properties){var result;if(O!==null){Empty[PROTOTYPE]=anObject(O);result=new Empty();Empty[PROTOTYPE]=null;// add \"__proto__\" for Object.getPrototypeOf polyfill\nresult[IE_PROTO]=O;}else result=_createDict();return Properties===undefined?result:dPs(result,Properties);};},{\"./_an-object\":92,\"./_dom-create\":108,\"./_enum-bug-keys\":109,\"./_html\":117,\"./_object-dps\":134,\"./_shared-key\":149}],133:[function(require,module,exports){var anObject=require(\"./_an-object\"),IE8_DOM_DEFINE=require(\"./_ie8-dom-define\"),toPrimitive=require(\"./_to-primitive\"),dP=_defineProperty3.default;exports.f=require(\"./_descriptors\")?_defineProperty3.default:function defineProperty(O,P,Attributes){anObject(O);P=toPrimitive(P,true);anObject(Attributes);if(IE8_DOM_DEFINE)try{return dP(O,P,Attributes);}catch(e){/* empty */}if('get'in Attributes||'set'in Attributes)throw TypeError('Accessors not supported!');if('value'in Attributes)O[P]=Attributes.value;return O;};},{\"./_an-object\":92,\"./_descriptors\":107,\"./_ie8-dom-define\":118,\"./_to-primitive\":157}],134:[function(require,module,exports){var dP=require(\"./_object-dp\"),anObject=require(\"./_an-object\"),getKeys=require(\"./_object-keys\");module.exports=require(\"./_descriptors\")?_defineProperties2.default:function defineProperties(O,Properties){anObject(O);var keys=getKeys(Properties),length=keys.length,i=0,P;while(length>i){dP.f(O,P=keys[i++],Properties[P]);}return O;};},{\"./_an-object\":92,\"./_descriptors\":107,\"./_object-dp\":133,\"./_object-keys\":141}],135:[function(require,module,exports){var pIE=require(\"./_object-pie\"),createDesc=require(\"./_property-desc\"),toIObject=require(\"./_to-iobject\"),toPrimitive=require(\"./_to-primitive\"),has=require(\"./_has\"),IE8_DOM_DEFINE=require(\"./_ie8-dom-define\"),gOPD=_getOwnPropertyDescriptor2.default;exports.f=require(\"./_descriptors\")?gOPD:function getOwnPropertyDescriptor(O,P){O=toIObject(O);P=toPrimitive(P,true);if(IE8_DOM_DEFINE)try{return gOPD(O,P);}catch(e){/* empty */}if(has(O,P))return createDesc(!pIE.f.call(O,P),O[P]);};},{\"./_descriptors\":107,\"./_has\":115,\"./_ie8-dom-define\":118,\"./_object-pie\":142,\"./_property-desc\":144,\"./_to-iobject\":154,\"./_to-primitive\":157}],136:[function(require,module,exports){// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject=require(\"./_to-iobject\"),gOPN=require(\"./_object-gopn\").f,toString={}.toString;var windowNames=(typeof window===\"undefined\"?\"undefined\":(0,_typeof6.default)(window))=='object'&&window&&_getOwnPropertyNames2.default?(0,_getOwnPropertyNames2.default)(window):[];var getWindowNames=function getWindowNames(it){try{return gOPN(it);}catch(e){return windowNames.slice();}};module.exports.f=function getOwnPropertyNames(it){return windowNames&&toString.call(it)=='[object Window]'?getWindowNames(it):gOPN(toIObject(it));};},{\"./_object-gopn\":137,\"./_to-iobject\":154}],137:[function(require,module,exports){// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys=require(\"./_object-keys-internal\"),hiddenKeys=require(\"./_enum-bug-keys\").concat('length','prototype');exports.f=_getOwnPropertyNames2.default||function getOwnPropertyNames(O){return $keys(O,hiddenKeys);};},{\"./_enum-bug-keys\":109,\"./_object-keys-internal\":140}],138:[function(require,module,exports){exports.f=_getOwnPropertySymbols4.default;},{}],139:[function(require,module,exports){// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has=require(\"./_has\"),toObject=require(\"./_to-object\"),IE_PROTO=require(\"./_shared-key\")('IE_PROTO'),ObjectProto=Object.prototype;module.exports=_getPrototypeOf2.default||function(O){O=toObject(O);if(has(O,IE_PROTO))return O[IE_PROTO];if(typeof O.constructor=='function'&&O instanceof O.constructor){return O.constructor.prototype;}return O instanceof Object?ObjectProto:null;};},{\"./_has\":115,\"./_shared-key\":149,\"./_to-object\":156}],140:[function(require,module,exports){var has=require(\"./_has\"),toIObject=require(\"./_to-iobject\"),arrayIndexOf=require(\"./_array-includes\")(false),IE_PROTO=require(\"./_shared-key\")('IE_PROTO');module.exports=function(object,names){var O=toIObject(object),i=0,result=[],key;for(key in O){if(key!=IE_PROTO)has(O,key)&&result.push(key);}// Don't enum bug & hidden keys\nwhile(names.length>i){if(has(O,key=names[i++])){~arrayIndexOf(result,key)||result.push(key);}}return result;};},{\"./_array-includes\":94,\"./_has\":115,\"./_shared-key\":149,\"./_to-iobject\":154}],141:[function(require,module,exports){// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys=require(\"./_object-keys-internal\"),enumBugKeys=require(\"./_enum-bug-keys\");module.exports=_keys4.default||function keys(O){return $keys(O,enumBugKeys);};},{\"./_enum-bug-keys\":109,\"./_object-keys-internal\":140}],142:[function(require,module,exports){exports.f={}.propertyIsEnumerable;},{}],143:[function(require,module,exports){// most Object methods by ES6 should accept primitives\nvar $export=require(\"./_export\"),core=require(\"./_core\"),fails=require(\"./_fails\");module.exports=function(KEY,exec){var fn=(core.Object||{})[KEY]||Object[KEY],exp={};exp[KEY]=exec(fn);$export($export.S+$export.F*fails(function(){fn(1);}),'Object',exp);};},{\"./_core\":104,\"./_export\":111,\"./_fails\":112}],144:[function(require,module,exports){module.exports=function(bitmap,value){return{enumerable:!(bitmap&1),configurable:!(bitmap&2),writable:!(bitmap&4),value:value};};},{}],145:[function(require,module,exports){var hide=require(\"./_hide\");module.exports=function(target,src,safe){for(var key in src){if(safe&&target[key])target[key]=src[key];else hide(target,key,src[key]);}return target;};},{\"./_hide\":116}],146:[function(require,module,exports){module.exports=require(\"./_hide\");},{\"./_hide\":116}],147:[function(require,module,exports){'use strict';var global=require(\"./_global\"),core=require(\"./_core\"),dP=require(\"./_object-dp\"),DESCRIPTORS=require(\"./_descriptors\"),SPECIES=require(\"./_wks\")('species');module.exports=function(KEY){var C=typeof core[KEY]=='function'?core[KEY]:global[KEY];if(DESCRIPTORS&&C&&!C[SPECIES])dP.f(C,SPECIES,{configurable:true,get:function get(){return this;}});};},{\"./_core\":104,\"./_descriptors\":107,\"./_global\":114,\"./_object-dp\":133,\"./_wks\":161}],148:[function(require,module,exports){var def=require(\"./_object-dp\").f,has=require(\"./_has\"),TAG=require(\"./_wks\")('toStringTag');module.exports=function(it,tag,stat){if(it&&!has(it=stat?it:it.prototype,TAG))def(it,TAG,{configurable:true,value:tag});};},{\"./_has\":115,\"./_object-dp\":133,\"./_wks\":161}],149:[function(require,module,exports){var shared=require(\"./_shared\")('keys'),uid=require(\"./_uid\");module.exports=function(key){return shared[key]||(shared[key]=uid(key));};},{\"./_shared\":150,\"./_uid\":158}],150:[function(require,module,exports){var global=require(\"./_global\"),SHARED='__core-js_shared__',store=global[SHARED]||(global[SHARED]={});module.exports=function(key){return store[key]||(store[key]={});};},{\"./_global\":114}],151:[function(require,module,exports){var toInteger=require(\"./_to-integer\"),defined=require(\"./_defined\");// true  -> String#at\n// false -> String#codePointAt\nmodule.exports=function(TO_STRING){return function(that,pos){var s=String(defined(that)),i=toInteger(pos),l=s.length,a,b;if(i<0||i>=l)return TO_STRING?'':undefined;a=s.charCodeAt(i);return a<0xd800||a>0xdbff||i+1===l||(b=s.charCodeAt(i+1))<0xdc00||b>0xdfff?TO_STRING?s.charAt(i):a:TO_STRING?s.slice(i,i+2):(a-0xd800<<10)+(b-0xdc00)+0x10000;};};},{\"./_defined\":106,\"./_to-integer\":153}],152:[function(require,module,exports){var toInteger=require(\"./_to-integer\"),max=Math.max,min=Math.min;module.exports=function(index,length){index=toInteger(index);return index<0?max(index+length,0):min(index,length);};},{\"./_to-integer\":153}],153:[function(require,module,exports){// 7.1.4 ToInteger\nvar ceil=Math.ceil,floor=Math.floor;module.exports=function(it){return isNaN(it=+it)?0:(it>0?floor:ceil)(it);};},{}],154:[function(require,module,exports){// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject=require(\"./_iobject\"),defined=require(\"./_defined\");module.exports=function(it){return IObject(defined(it));};},{\"./_defined\":106,\"./_iobject\":119}],155:[function(require,module,exports){// 7.1.15 ToLength\nvar toInteger=require(\"./_to-integer\"),min=Math.min;module.exports=function(it){return it>0?min(toInteger(it),0x1fffffffffffff):0;// pow(2, 53) - 1 == 9007199254740991\n};},{\"./_to-integer\":153}],156:[function(require,module,exports){// 7.1.13 ToObject(argument)\nvar defined=require(\"./_defined\");module.exports=function(it){return Object(defined(it));};},{\"./_defined\":106}],157:[function(require,module,exports){// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject=require(\"./_is-object\");// 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){if(!isObject(it))return it;var fn,val;if(S&&typeof(fn=it.toString)=='function'&&!isObject(val=fn.call(it)))return val;if(typeof(fn=it.valueOf)=='function'&&!isObject(val=fn.call(it)))return val;if(!S&&typeof(fn=it.toString)=='function'&&!isObject(val=fn.call(it)))return val;throw TypeError(\"Can't convert object to primitive value\");};},{\"./_is-object\":122}],158:[function(require,module,exports){var id=0,px=Math.random();module.exports=function(key){return'Symbol('.concat(key===undefined?'':key,')_',(++id+px).toString(36));};},{}],159:[function(require,module,exports){var global=require(\"./_global\"),core=require(\"./_core\"),LIBRARY=require(\"./_library\"),wksExt=require(\"./_wks-ext\"),defineProperty=require(\"./_object-dp\").f;module.exports=function(name){var $Symbol=core.Symbol||(core.Symbol=LIBRARY?{}:global.Symbol||{});if(name.charAt(0)!='_'&&!(name in $Symbol))defineProperty($Symbol,name,{value:wksExt.f(name)});};},{\"./_core\":104,\"./_global\":114,\"./_library\":129,\"./_object-dp\":133,\"./_wks-ext\":160}],160:[function(require,module,exports){exports.f=require(\"./_wks\");},{\"./_wks\":161}],161:[function(require,module,exports){var store=require(\"./_shared\")('wks'),uid=require(\"./_uid\"),_Symbol2=require(\"./_global\").Symbol,USE_SYMBOL=typeof _Symbol2=='function';var $exports=module.exports=function(name){return store[name]||(store[name]=USE_SYMBOL&&_Symbol2[name]||(USE_SYMBOL?_Symbol2:uid)('Symbol.'+name));};$exports.store=store;},{\"./_global\":114,\"./_shared\":150,\"./_uid\":158}],162:[function(require,module,exports){var classof=require(\"./_classof\"),ITERATOR=require(\"./_wks\")('iterator'),Iterators=require(\"./_iterators\");module.exports=require(\"./_core\").getIteratorMethod=function(it){if(it!=undefined)return it[ITERATOR]||it['@@iterator']||Iterators[classof(it)];};},{\"./_classof\":98,\"./_core\":104,\"./_iterators\":127,\"./_wks\":161}],163:[function(require,module,exports){var anObject=require(\"./_an-object\"),get=require(\"./core.get-iterator-method\");module.exports=require(\"./_core\").getIterator=function(it){var iterFn=get(it);if(typeof iterFn!='function')throw TypeError(it+' is not iterable!');return anObject(iterFn.call(it));};},{\"./_an-object\":92,\"./_core\":104,\"./core.get-iterator-method\":162}],164:[function(require,module,exports){'use strict';var addToUnscopables=require(\"./_add-to-unscopables\"),step=require(\"./_iter-step\"),Iterators=require(\"./_iterators\"),toIObject=require(\"./_to-iobject\");// 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){this._t=toIObject(iterated);// target\nthis._i=0;// next index\nthis._k=kind;// kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n},function(){var O=this._t,kind=this._k,index=this._i++;if(!O||index>=O.length){this._t=undefined;return step(1);}if(kind=='keys')return step(0,index);if(kind=='values')return step(0,O[index]);return step(0,[index,O[index]]);},'values');// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments=Iterators.Array;addToUnscopables('keys');addToUnscopables('values');addToUnscopables('entries');},{\"./_add-to-unscopables\":90,\"./_iter-define\":125,\"./_iter-step\":126,\"./_iterators\":127,\"./_to-iobject\":154}],165:[function(require,module,exports){'use strict';var strong=require(\"./_collection-strong\");// 23.1 Map Objects\nmodule.exports=require(\"./_collection\")('Map',function(get){return function Map(){return get(this,arguments.length>0?arguments[0]:undefined);};},{// 23.1.3.6 Map.prototype.get(key)\nget:function get(key){var entry=strong.getEntry(this,key);return entry&&entry.v;},// 23.1.3.9 Map.prototype.set(key, value)\nset:function set(key,value){return strong.def(this,key===0?0:key,value);}},strong,true);},{\"./_collection\":103,\"./_collection-strong\":100}],166:[function(require,module,exports){// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export=require(\"./_export\");$export($export.S,'Number',{MAX_SAFE_INTEGER:0x1fffffffffffff});},{\"./_export\":111}],167:[function(require,module,exports){var $export=require(\"./_export\");// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S,'Object',{create:require(\"./_object-create\")});},{\"./_export\":111,\"./_object-create\":132}],168:[function(require,module,exports){// 19.1.2.14 Object.keys(O)\nvar toObject=require(\"./_to-object\"),$keys=require(\"./_object-keys\");require(\"./_object-sap\")('keys',function(){return function keys(it){return $keys(toObject(it));};});},{\"./_object-keys\":141,\"./_object-sap\":143,\"./_to-object\":156}],169:[function(require,module,exports){arguments[4][75][0].apply(exports,arguments);},{\"dup\":75}],170:[function(require,module,exports){'use strict';var $at=require(\"./_string-at\")(true);// 21.1.3.27 String.prototype[@@iterator]()\nrequire(\"./_iter-define\")(String,'String',function(iterated){this._t=String(iterated);// target\nthis._i=0;// next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n},function(){var O=this._t,index=this._i,point;if(index>=O.length)return{value:undefined,done:true};point=$at(O,index);this._i+=point.length;return{value:point,done:false};});},{\"./_iter-define\":125,\"./_string-at\":151}],171:[function(require,module,exports){'use strict';// ECMAScript 6 symbols shim\nvar global=require(\"./_global\"),has=require(\"./_has\"),DESCRIPTORS=require(\"./_descriptors\"),$export=require(\"./_export\"),redefine=require(\"./_redefine\"),META=require(\"./_meta\").KEY,$fails=require(\"./_fails\"),shared=require(\"./_shared\"),setToStringTag=require(\"./_set-to-string-tag\"),uid=require(\"./_uid\"),wks=require(\"./_wks\"),wksExt=require(\"./_wks-ext\"),wksDefine=require(\"./_wks-define\"),keyOf=require(\"./_keyof\"),enumKeys=require(\"./_enum-keys\"),isArray=require(\"./_is-array\"),anObject=require(\"./_an-object\"),toIObject=require(\"./_to-iobject\"),toPrimitive=require(\"./_to-primitive\"),createDesc=require(\"./_property-desc\"),_create=require(\"./_object-create\"),gOPNExt=require(\"./_object-gopn-ext\"),$GOPD=require(\"./_object-gopd\"),$DP=require(\"./_object-dp\"),$keys=require(\"./_object-keys\"),gOPD=$GOPD.f,dP=$DP.f,gOPN=gOPNExt.f,$Symbol=global.Symbol,$JSON=global.JSON,_stringify=$JSON&&$JSON.stringify,PROTOTYPE='prototype',HIDDEN=wks('_hidden'),TO_PRIMITIVE=wks('toPrimitive'),isEnum={}.propertyIsEnumerable,SymbolRegistry=shared('symbol-registry'),AllSymbols=shared('symbols'),OPSymbols=shared('op-symbols'),ObjectProto=Object[PROTOTYPE],USE_NATIVE=typeof $Symbol=='function',QObject=global.QObject;// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter=!QObject||!QObject[PROTOTYPE]||!QObject[PROTOTYPE].findChild;// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc=DESCRIPTORS&&$fails(function(){return _create(dP({},'a',{get:function get(){return dP(this,'a',{value:7}).a;}})).a!=7;})?function(it,key,D){var protoDesc=gOPD(ObjectProto,key);if(protoDesc)delete ObjectProto[key];dP(it,key,D);if(protoDesc&&it!==ObjectProto)dP(ObjectProto,key,protoDesc);}:dP;var wrap=function wrap(tag){var sym=AllSymbols[tag]=_create($Symbol[PROTOTYPE]);sym._k=tag;return sym;};var isSymbol=USE_NATIVE&&(0,_typeof6.default)($Symbol.iterator)=='symbol'?function(it){return(typeof it===\"undefined\"?\"undefined\":(0,_typeof6.default)(it))=='symbol';}:function(it){return it instanceof $Symbol;};var $defineProperty=function defineProperty(it,key,D){if(it===ObjectProto)$defineProperty(OPSymbols,key,D);anObject(it);key=toPrimitive(key,true);anObject(D);if(has(AllSymbols,key)){if(!D.enumerable){if(!has(it,HIDDEN))dP(it,HIDDEN,createDesc(1,{}));it[HIDDEN][key]=true;}else{if(has(it,HIDDEN)&&it[HIDDEN][key])it[HIDDEN][key]=false;D=_create(D,{enumerable:createDesc(0,false)});}return setSymbolDesc(it,key,D);}return dP(it,key,D);};var $defineProperties=function defineProperties(it,P){anObject(it);var keys=enumKeys(P=toIObject(P)),i=0,l=keys.length,key;while(l>i){$defineProperty(it,key=keys[i++],P[key]);}return it;};var $create=function create(it,P){return P===undefined?_create(it):$defineProperties(_create(it),P);};var $propertyIsEnumerable=function propertyIsEnumerable(key){var E=isEnum.call(this,key=toPrimitive(key,true));if(this===ObjectProto&&has(AllSymbols,key)&&!has(OPSymbols,key))return false;return E||!has(this,key)||!has(AllSymbols,key)||has(this,HIDDEN)&&this[HIDDEN][key]?E:true;};var $getOwnPropertyDescriptor=function getOwnPropertyDescriptor(it,key){it=toIObject(it);key=toPrimitive(key,true);if(it===ObjectProto&&has(AllSymbols,key)&&!has(OPSymbols,key))return;var D=gOPD(it,key);if(D&&has(AllSymbols,key)&&!(has(it,HIDDEN)&&it[HIDDEN][key]))D.enumerable=true;return D;};var $getOwnPropertyNames=function getOwnPropertyNames(it){var names=gOPN(toIObject(it)),result=[],i=0,key;while(names.length>i){if(!has(AllSymbols,key=names[i++])&&key!=HIDDEN&&key!=META)result.push(key);}return result;};var $getOwnPropertySymbols=function getOwnPropertySymbols(it){var IS_OP=it===ObjectProto,names=gOPN(IS_OP?OPSymbols:toIObject(it)),result=[],i=0,key;while(names.length>i){if(has(AllSymbols,key=names[i++])&&(IS_OP?has(ObjectProto,key):true))result.push(AllSymbols[key]);}return result;};// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){$Symbol=function _Symbol3(){if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');var tag=uid(arguments.length>0?arguments[0]:undefined);var $set=function $set(value){if(this===ObjectProto)$set.call(OPSymbols,value);if(has(this,HIDDEN)&&has(this[HIDDEN],tag))this[HIDDEN][tag]=false;setSymbolDesc(this,tag,createDesc(1,value));};if(DESCRIPTORS&&setter)setSymbolDesc(ObjectProto,tag,{configurable:true,set:$set});return wrap(tag);};redefine($Symbol[PROTOTYPE],'toString',function toString(){return this._k;});$GOPD.f=$getOwnPropertyDescriptor;$DP.f=$defineProperty;require(\"./_object-gopn\").f=gOPNExt.f=$getOwnPropertyNames;require(\"./_object-pie\").f=$propertyIsEnumerable;require(\"./_object-gops\").f=$getOwnPropertySymbols;if(DESCRIPTORS&&!require(\"./_library\")){redefine(ObjectProto,'propertyIsEnumerable',$propertyIsEnumerable,true);}wksExt.f=function(name){return wrap(wks(name));};}$export($export.G+$export.W+$export.F*!USE_NATIVE,{Symbol:$Symbol});for(var symbols=// 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'.split(','),i=0;symbols.length>i;){wks(symbols[i++]);}for(var symbols=$keys(wks.store),i=0;symbols.length>i;){wksDefine(symbols[i++]);}$export($export.S+$export.F*!USE_NATIVE,'Symbol',{// 19.4.2.1 Symbol.for(key)\n'for':function _for(key){return has(SymbolRegistry,key+='')?SymbolRegistry[key]:SymbolRegistry[key]=$Symbol(key);},// 19.4.2.5 Symbol.keyFor(sym)\nkeyFor:function keyFor(key){if(isSymbol(key))return keyOf(SymbolRegistry,key);throw TypeError(key+' is not a symbol!');},useSetter:function useSetter(){setter=true;},useSimple:function useSimple(){setter=false;}});$export($export.S+$export.F*!USE_NATIVE,'Object',{// 19.1.2.2 Object.create(O [, Properties])\ncreate:$create,// 19.1.2.4 Object.defineProperty(O, P, Attributes)\ndefineProperty:$defineProperty,// 19.1.2.3 Object.defineProperties(O, Properties)\ndefineProperties:$defineProperties,// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\ngetOwnPropertyDescriptor:$getOwnPropertyDescriptor,// 19.1.2.7 Object.getOwnPropertyNames(O)\ngetOwnPropertyNames:$getOwnPropertyNames,// 19.1.2.8 Object.getOwnPropertySymbols(O)\ngetOwnPropertySymbols:$getOwnPropertySymbols});// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON&&$export($export.S+$export.F*(!USE_NATIVE||$fails(function(){var S=$Symbol();// MS Edge converts symbol values to JSON as {}\n// WebKit converts symbol values to JSON as null\n// V8 throws on boxed symbols\nreturn _stringify([S])!='[null]'||_stringify({a:S})!='{}'||_stringify(Object(S))!='{}';})),'JSON',{stringify:function stringify(it){if(it===undefined||isSymbol(it))return;// IE8 returns string on undefined\nvar args=[it],i=1,replacer,$replacer;while(arguments.length>i){args.push(arguments[i++]);}replacer=args[1];if(typeof replacer=='function')$replacer=replacer;if($replacer||!isArray(replacer))replacer=function replacer(key,value){if($replacer)value=$replacer.call(this,key,value);if(!isSymbol(value))return value;};args[1]=replacer;return _stringify.apply($JSON,args);}});// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE]||require(\"./_hide\")($Symbol[PROTOTYPE],TO_PRIMITIVE,$Symbol[PROTOTYPE].valueOf);// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol,'Symbol');// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math,'Math',true);// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON,'JSON',true);},{\"./_an-object\":92,\"./_descriptors\":107,\"./_enum-keys\":110,\"./_export\":111,\"./_fails\":112,\"./_global\":114,\"./_has\":115,\"./_hide\":116,\"./_is-array\":121,\"./_keyof\":128,\"./_library\":129,\"./_meta\":130,\"./_object-create\":132,\"./_object-dp\":133,\"./_object-gopd\":135,\"./_object-gopn\":137,\"./_object-gopn-ext\":136,\"./_object-gops\":138,\"./_object-keys\":141,\"./_object-pie\":142,\"./_property-desc\":144,\"./_redefine\":146,\"./_set-to-string-tag\":148,\"./_shared\":150,\"./_to-iobject\":154,\"./_to-primitive\":157,\"./_uid\":158,\"./_wks\":161,\"./_wks-define\":159,\"./_wks-ext\":160}],172:[function(require,module,exports){'use strict';var each=require(\"./_array-methods\")(0),redefine=require(\"./_redefine\"),meta=require(\"./_meta\"),assign=require(\"./_object-assign\"),weak=require(\"./_collection-weak\"),isObject=require(\"./_is-object\"),getWeak=meta.getWeak,isExtensible=_isExtensible2.default,uncaughtFrozenStore=weak.ufstore,tmp={},InternalMap;var wrapper=function wrapper(get){return function WeakMap(){return get(this,arguments.length>0?arguments[0]:undefined);};};var methods={// 23.3.3.3 WeakMap.prototype.get(key)\nget:function get(key){if(isObject(key)){var data=getWeak(key);if(data===true)return uncaughtFrozenStore(this).get(key);return data?data[this._i]:undefined;}},// 23.3.3.5 WeakMap.prototype.set(key, value)\nset:function set(key,value){return weak.def(this,key,value);}};// 23.3 WeakMap Objects\nvar $WeakMap=module.exports=require(\"./_collection\")('WeakMap',wrapper,methods,weak,true,true);// IE11 WeakMap frozen keys fix\nif(new $WeakMap().set((_freeze2.default||Object)(tmp),7).get(tmp)!=7){InternalMap=weak.getConstructor(wrapper);assign(InternalMap.prototype,methods);meta.NEED=true;each(['delete','has','get','set'],function(key){var proto=$WeakMap.prototype,method=proto[key];redefine(proto,key,function(a,b){// store frozen objects on internal weakmap shim\nif(isObject(a)&&!isExtensible(a)){if(!this._f)this._f=new InternalMap();var result=this._f[key](a,b);return key=='set'?this:result;// store all the rest on native weakmap\n}return method.call(this,a,b);});});}},{\"./_array-methods\":95,\"./_collection\":103,\"./_collection-weak\":102,\"./_is-object\":122,\"./_meta\":130,\"./_object-assign\":131,\"./_redefine\":146}],173:[function(require,module,exports){// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export=require(\"./_export\");$export($export.P+$export.R,'Map',{toJSON:require(\"./_collection-to-json\")('Map')});},{\"./_collection-to-json\":101,\"./_export\":111}],174:[function(require,module,exports){require(\"./_wks-define\")('asyncIterator');},{\"./_wks-define\":159}],175:[function(require,module,exports){require(\"./_wks-define\")('observable');},{\"./_wks-define\":159}],176:[function(require,module,exports){require(\"./es6.array.iterator\");var global=require(\"./_global\"),hide=require(\"./_hide\"),Iterators=require(\"./_iterators\"),TO_STRING_TAG=require(\"./_wks\")('toStringTag');for(var collections=['NodeList','DOMTokenList','MediaList','StyleSheetList','CSSRuleList'],i=0;i<5;i++){var NAME=collections[i],Collection=global[NAME],proto=Collection&&Collection.prototype;if(proto&&!proto[TO_STRING_TAG])hide(proto,TO_STRING_TAG,NAME);Iterators[NAME]=Iterators.Array;}},{\"./_global\":114,\"./_hide\":116,\"./_iterators\":127,\"./_wks\":161,\"./es6.array.iterator\":164}],177:[function(require,module,exports){'use strict';var copy=require(\"es5-ext/object/copy\"),map=require(\"es5-ext/object/map\"),callable=require(\"es5-ext/object/valid-callable\"),validValue=require(\"es5-ext/object/valid-value\"),bind=Function.prototype.bind,defineProperty=_defineProperty3.default,hasOwnProperty=Object.prototype.hasOwnProperty,define;define=function define(name,desc,bindTo){var value=validValue(desc)&&callable(desc.value),dgs;dgs=copy(desc);delete dgs.writable;delete dgs.value;dgs.get=function(){if(hasOwnProperty.call(this,name))return value;desc.value=bind.call(value,bindTo==null?this:this[bindTo]);defineProperty(this,name,desc);return this[name];};return dgs;};module.exports=function(props/*, bindTo*/){var bindTo=arguments[1];return map(props,function(desc,name){return define(name,desc,bindTo);});};},{\"es5-ext/object/copy\":210,\"es5-ext/object/map\":218,\"es5-ext/object/valid-callable\":224,\"es5-ext/object/valid-value\":226}],178:[function(require,module,exports){'use strict';var assign=require(\"es5-ext/object/assign\"),normalizeOpts=require(\"es5-ext/object/normalize-options\"),isCallable=require(\"es5-ext/object/is-callable\"),contains=require(\"es5-ext/string/#/contains\"),d;d=module.exports=function(dscr,value/*, options*/){var c,e,w,options,desc;if(arguments.length<2||typeof dscr!=='string'){options=value;value=dscr;dscr=null;}else{options=arguments[2];}if(dscr==null){c=w=true;e=false;}else{c=contains.call(dscr,'c');e=contains.call(dscr,'e');w=contains.call(dscr,'w');}desc={value:value,configurable:c,enumerable:e,writable:w};return!options?desc:assign(normalizeOpts(options),desc);};d.gs=function(dscr,get,set/*, options*/){var c,e,options,desc;if(typeof dscr!=='string'){options=set;set=get;get=dscr;dscr=null;}else{options=arguments[3];}if(get==null){get=undefined;}else if(!isCallable(get)){options=get;get=set=undefined;}else if(set==null){set=undefined;}else if(!isCallable(set)){options=set;set=undefined;}if(dscr==null){c=true;e=false;}else{c=contains.call(dscr,'c');e=contains.call(dscr,'e');}desc={get:get,set:set,configurable:c,enumerable:e};return!options?desc:assign(normalizeOpts(options),desc);};},{\"es5-ext/object/assign\":207,\"es5-ext/object/is-callable\":213,\"es5-ext/object/normalize-options\":219,\"es5-ext/string/#/contains\":227}],179:[function(require,module,exports){(function(process){/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */exports=module.exports=require(\"./debug\");exports.log=log;exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.storage='undefined'!=typeof chrome&&'undefined'!=typeof chrome.storage?chrome.storage.local:localstorage();/**\n * Colors.\n */exports.colors=['lightseagreen','forestgreen','goldenrod','dodgerblue','darkorchid','crimson'];/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */function useColors(){// NB: In an Electron preload script, document will be defined but not fully\n// initialized. Since we know we're in Chrome, we'll just detect this case\n// explicitly\nif(typeof window!=='undefined'&&window&&typeof window.process!=='undefined'&&window.process.type==='renderer'){return true;}// is webkit? http://stackoverflow.com/a/16459606/376773\n// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\nreturn typeof document!=='undefined'&&document&&'WebkitAppearance'in document.documentElement.style||// is firebug? http://stackoverflow.com/a/398120/376773\ntypeof window!=='undefined'&&window&&window.console&&(console.firebug||console.exception&&console.table)||// is firefox >= v31?\n// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\ntypeof navigator!=='undefined'&&navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||// double check webkit in userAgent just in case we are in a worker\ntypeof navigator!=='undefined'&&navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);}/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */exports.formatters.j=function(v){try{return(0,_stringify4.default)(v);}catch(err){return'[UnexpectedJSONParseError]: '+err.message;}};/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */function formatArgs(args){var useColors=this.useColors;args[0]=(useColors?'%c':'')+this.namespace+(useColors?' %c':' ')+args[0]+(useColors?'%c ':' ')+'+'+exports.humanize(this.diff);if(!useColors)return;var c='color: '+this.color;args.splice(1,0,c,'color: inherit');// the final \"%c\" is somewhat tricky, because there could be other\n// arguments passed either before or after the %c, so we need to\n// figure out the correct index to insert the CSS into\nvar index=0;var lastC=0;args[0].replace(/%[a-zA-Z%]/g,function(match){if('%%'===match)return;index++;if('%c'===match){// we only are interested in the *last* %c\n// (the user may have provided their own)\nlastC=index;}});args.splice(lastC,0,c);}/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */function log(){// this hackery is required for IE8/9, where\n// the `console.log` function doesn't have 'apply'\nreturn'object'===(typeof console===\"undefined\"?\"undefined\":(0,_typeof6.default)(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments);}/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */function save(namespaces){try{if(null==namespaces){exports.storage.removeItem('debug');}else{exports.storage.debug=namespaces;}}catch(e){}}/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */function load(){try{return exports.storage.debug;}catch(e){}// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\nif(typeof process!=='undefined'&&'env'in process){return process.env.DEBUG;}}/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */exports.enable(load());/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */function localstorage(){try{return window.localStorage;}catch(e){}}}).call(this,require(\"_process\"));},{\"./debug\":180,\"_process\":594}],180:[function(require,module,exports){/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */exports=module.exports=createDebug.debug=createDebug['default']=createDebug;exports.coerce=coerce;exports.disable=disable;exports.enable=enable;exports.enabled=enabled;exports.humanize=require(\"ms\");/**\n * The currently active debug mode names, and names to skip.\n */exports.names=[];exports.skips=[];/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */exports.formatters={};/**\n * Previous log timestamp.\n */var prevTime;/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */function selectColor(namespace){var hash=0,i;for(i in namespace){hash=(hash<<5)-hash+namespace.charCodeAt(i);hash|=0;// Convert to 32bit integer\n}return exports.colors[Math.abs(hash)%exports.colors.length];}/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */function createDebug(namespace){function debug(){// disabled?\nif(!debug.enabled)return;var self=debug;// set `diff` timestamp\nvar curr=+new Date();var ms=curr-(prevTime||curr);self.diff=ms;self.prev=prevTime;self.curr=curr;prevTime=curr;// turn the `arguments` into a proper Array\nvar args=new Array(arguments.length);for(var i=0;i<args.length;i++){args[i]=arguments[i];}args[0]=exports.coerce(args[0]);if('string'!==typeof args[0]){// anything else let's inspect with %O\nargs.unshift('%O');}// apply any `formatters` transformations\nvar index=0;args[0]=args[0].replace(/%([a-zA-Z%])/g,function(match,format){// if we encounter an escaped % then don't increase the array index\nif(match==='%%')return match;index++;var formatter=exports.formatters[format];if('function'===typeof formatter){var val=args[index];match=formatter.call(self,val);// now we need to remove `args[index]` since it's inlined in the `format`\nargs.splice(index,1);index--;}return match;});// apply env-specific formatting (colors, etc.)\nexports.formatArgs.call(self,args);var logFn=debug.log||exports.log||console.log.bind(console);logFn.apply(self,args);}debug.namespace=namespace;debug.enabled=exports.enabled(namespace);debug.useColors=exports.useColors();debug.color=selectColor(namespace);// env-specific initialization logic for debug instances\nif('function'===typeof exports.init){exports.init(debug);}return debug;}/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */function enable(namespaces){exports.save(namespaces);exports.names=[];exports.skips=[];var split=(namespaces||'').split(/[\\s,]+/);var len=split.length;for(var i=0;i<len;i++){if(!split[i])continue;// ignore empty strings\nnamespaces=split[i].replace(/\\*/g,'.*?');if(namespaces[0]==='-'){exports.skips.push(new RegExp('^'+namespaces.substr(1)+'$'));}else{exports.names.push(new RegExp('^'+namespaces+'$'));}}}/**\n * Disable debug output.\n *\n * @api public\n */function disable(){exports.enable('');}/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */function enabled(name){var i,len;for(i=0,len=exports.skips.length;i<len;i++){if(exports.skips[i].test(name)){return false;}}for(i=0,len=exports.names.length;i<len;i++){if(exports.names[i].test(name)){return true;}}return false;}/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */function coerce(val){if(val instanceof Error)return val.stack||val.message;return val;}},{\"ms\":577}],181:[function(require,module,exports){'use strict';var keys=require(\"object-keys\");var foreach=require(\"foreach\");var hasSymbols=typeof _symbol4.default==='function'&&(0,_typeof6.default)((0,_symbol4.default)())==='symbol';var toStr=Object.prototype.toString;var isFunction=function isFunction(fn){return typeof fn==='function'&&toStr.call(fn)==='[object Function]';};var arePropertyDescriptorsSupported=function arePropertyDescriptorsSupported(){var obj={};try{Object.defineProperty(obj,'x',{enumerable:false,value:obj});/* eslint-disable no-unused-vars, no-restricted-syntax */for(var _ in obj){return false;}/* eslint-enable no-unused-vars, no-restricted-syntax */return obj.x===obj;}catch(e){/* this is IE 8. */return false;}};var supportsDescriptors=_defineProperty3.default&&arePropertyDescriptorsSupported();var defineProperty=function defineProperty(object,name,value,predicate){if(name in object&&(!isFunction(predicate)||!predicate())){return;}if(supportsDescriptors){(0,_defineProperty3.default)(object,name,{configurable:true,enumerable:false,value:value,writable:true});}else{object[name]=value;}};var defineProperties=function defineProperties(object,map){var predicates=arguments.length>2?arguments[2]:{};var props=keys(map);if(hasSymbols){props=props.concat((0,_getOwnPropertySymbols4.default)(map));}foreach(props,function(name){defineProperty(object,name,map[name],predicates[name]);});};defineProperties.supportsDescriptors=!!supportsDescriptors;module.exports=defineProperties;},{\"foreach\":368,\"object-keys\":580}],182:[function(require,module,exports){/*\n * @fileoverview Main Doctrine object\n * @author Yusuke Suzuki <utatane.tea@gmail.com>\n * @author Dan Tao <daniel.tao@gmail.com>\n * @author Andrew Eisenberg <andrew@eisenberg.as>\n */(function(){'use strict';var typed,utility,isArray,jsdoc,esutils,hasOwnProperty;esutils=require(\"esutils\");isArray=require(\"isarray\");typed=require(\"./typed\");utility=require(\"./utility\");function sliceSource(source,index,last){return source.slice(index,last);}hasOwnProperty=function(){var func=Object.prototype.hasOwnProperty;return function hasOwnProperty(obj,name){return func.call(obj,name);};}();function shallowCopy(obj){var ret={},key;for(key in obj){if(obj.hasOwnProperty(key)){ret[key]=obj[key];}}return ret;}function isASCIIAlphanumeric(ch){return ch>=0x61/* 'a' */&&ch<=0x7A/* 'z' */||ch>=0x41/* 'A' */&&ch<=0x5A/* 'Z' */||ch>=0x30/* '0' */&&ch<=0x39/* '9' */;}function isParamTitle(title){return title==='param'||title==='argument'||title==='arg';}function isReturnTitle(title){return title==='return'||title==='returns';}function isProperty(title){return title==='property'||title==='prop';}function isNameParameterRequired(title){return isParamTitle(title)||isProperty(title)||title==='alias'||title==='this'||title==='mixes'||title==='requires';}function isAllowedName(title){return isNameParameterRequired(title)||title==='const'||title==='constant';}function isAllowedNested(title){return isProperty(title)||isParamTitle(title);}function isAllowedOptional(title){return isProperty(title)||isParamTitle(title);}function isTypeParameterRequired(title){return isParamTitle(title)||isReturnTitle(title)||title==='define'||title==='enum'||title==='implements'||title==='this'||title==='type'||title==='typedef'||isProperty(title);}// Consider deprecation instead using 'isTypeParameterRequired' and 'Rules' declaration to pick when a type is optional/required\n// This would require changes to 'parseType'\nfunction isAllowedType(title){return isTypeParameterRequired(title)||title==='throws'||title==='const'||title==='constant'||title==='namespace'||title==='member'||title==='var'||title==='module'||title==='constructor'||title==='class'||title==='extends'||title==='augments'||title==='public'||title==='private'||title==='protected';}function trim(str){return str.replace(/^\\s+/,'').replace(/\\s+$/,'');}function unwrapComment(doc){// JSDoc comment is following form\n//   /**\n//    * .......\n//    */\n// remove /**, */ and *\nvar BEFORE_STAR=0,STAR=1,AFTER_STAR=2,index,len,mode,result,ch;doc=doc.replace(/^\\/\\*\\*?/,'').replace(/\\*\\/$/,'');index=0;len=doc.length;mode=BEFORE_STAR;result='';while(index<len){ch=doc.charCodeAt(index);switch(mode){case BEFORE_STAR:if(esutils.code.isLineTerminator(ch)){result+=String.fromCharCode(ch);}else if(ch===0x2A/* '*' */){mode=STAR;}else if(!esutils.code.isWhiteSpace(ch)){result+=String.fromCharCode(ch);mode=AFTER_STAR;}break;case STAR:if(!esutils.code.isWhiteSpace(ch)){result+=String.fromCharCode(ch);}mode=esutils.code.isLineTerminator(ch)?BEFORE_STAR:AFTER_STAR;break;case AFTER_STAR:result+=String.fromCharCode(ch);if(esutils.code.isLineTerminator(ch)){mode=BEFORE_STAR;}break;}index+=1;}return result.replace(/\\s+$/,'');}// JSDoc Tag Parser\n(function(exports){var Rules,index,lineNumber,length,source,recoverable,sloppy,strict;function advance(){var ch=source.charCodeAt(index);index+=1;if(esutils.code.isLineTerminator(ch)&&!(ch===0x0D/* '\\r' */&&source.charCodeAt(index)===0x0A/* '\\n' */)){lineNumber+=1;}return String.fromCharCode(ch);}function scanTitle(){var title='';// waste '@'\nadvance();while(index<length&&isASCIIAlphanumeric(source.charCodeAt(index))){title+=advance();}return title;}function seekContent(){var ch,waiting,last=index;waiting=false;while(last<length){ch=source.charCodeAt(last);if(esutils.code.isLineTerminator(ch)&&!(ch===0x0D/* '\\r' */&&source.charCodeAt(last+1)===0x0A/* '\\n' */)){waiting=true;}else if(waiting){if(ch===0x40/* '@' */){break;}if(!esutils.code.isWhiteSpace(ch)){waiting=false;}}last+=1;}return last;}// type expression may have nest brace, such as,\n// { { ok: string } }\n//\n// therefore, scanning type expression with balancing braces.\nfunction parseType(title,last){var ch,brace,type,direct=false;// search '{'\nwhile(index<last){ch=source.charCodeAt(index);if(esutils.code.isWhiteSpace(ch)){advance();}else if(ch===0x7B/* '{' */){advance();break;}else{// this is direct pattern\ndirect=true;break;}}if(direct){return null;}// type expression { is found\nbrace=1;type='';while(index<last){ch=source.charCodeAt(index);if(esutils.code.isLineTerminator(ch)){advance();}else{if(ch===0x7D/* '}' */){brace-=1;if(brace===0){advance();break;}}else if(ch===0x7B/* '{' */){brace+=1;}type+=advance();}}if(brace!==0){// braces is not balanced\nreturn utility.throwError('Braces are not balanced');}if(isAllowedOptional(title)){return typed.parseParamType(type);}return typed.parseType(type);}function scanIdentifier(last){var identifier;if(!esutils.code.isIdentifierStartES5(source.charCodeAt(index))){return null;}identifier=advance();while(index<last&&esutils.code.isIdentifierPartES5(source.charCodeAt(index))){identifier+=advance();}return identifier;}function skipWhiteSpace(last){while(index<last&&(esutils.code.isWhiteSpace(source.charCodeAt(index))||esutils.code.isLineTerminator(source.charCodeAt(index)))){advance();}}function parseName(last,allowBrackets,allowNestedParams){var name='',useBrackets,insideString;skipWhiteSpace(last);if(index>=last){return null;}if(allowBrackets&&source.charCodeAt(index)===0x5B/* '[' */){useBrackets=true;name=advance();}if(!esutils.code.isIdentifierStartES5(source.charCodeAt(index))){return null;}name+=scanIdentifier(last);if(allowNestedParams){if(source.charCodeAt(index)===0x3A/* ':' */&&(name==='module'||name==='external'||name==='event')){name+=advance();name+=scanIdentifier(last);}if(source.charCodeAt(index)===0x5B/* '[' */&&source.charCodeAt(index+1)===0x5D/* ']' */){name+=advance();name+=advance();}while(source.charCodeAt(index)===0x2E/* '.' */||source.charCodeAt(index)===0x2F/* '/' */||source.charCodeAt(index)===0x23/* '#' */||source.charCodeAt(index)===0x2D/* '-' */||source.charCodeAt(index)===0x7E/* '~' */){name+=advance();name+=scanIdentifier(last);}}if(useBrackets){skipWhiteSpace(last);// do we have a default value for this?\nif(source.charCodeAt(index)===0x3D/* '=' */){// consume the '='' symbol\nname+=advance();skipWhiteSpace(last);var ch;var bracketDepth=1;// scan in the default value\nwhile(index<last){ch=source.charCodeAt(index);if(esutils.code.isWhiteSpace(ch)){if(!insideString){skipWhiteSpace(last);ch=source.charCodeAt(index);}}if(ch===0x27/* ''' */){if(!insideString){insideString='\\'';}else{if(insideString==='\\''){insideString='';}}}if(ch===0x22/* '\"' */){if(!insideString){insideString='\"';}else{if(insideString==='\"'){insideString='';}}}if(ch===0x5B/* '[' */){bracketDepth++;}else if(ch===0x5D/* ']' */&&--bracketDepth===0){break;}name+=advance();}}skipWhiteSpace(last);if(index>=last||source.charCodeAt(index)!==0x5D/* ']' */){// we never found a closing ']'\nreturn null;}// collect the last ']'\nname+=advance();}return name;}function skipToTag(){while(index<length&&source.charCodeAt(index)!==0x40/* '@' */){advance();}if(index>=length){return false;}utility.assert(source.charCodeAt(index)===0x40/* '@' */);return true;}function TagParser(options,title){this._options=options;this._title=title.toLowerCase();this._tag={title:title,description:null};if(this._options.lineNumbers){this._tag.lineNumber=lineNumber;}this._last=0;// space to save special information for title parsers.\nthis._extra={};}// addError(err, ...)\nTagParser.prototype.addError=function addError(errorText){var args=Array.prototype.slice.call(arguments,1),msg=errorText.replace(/%(\\d)/g,function(whole,index){utility.assert(index<args.length,'Message reference must be in range');return args[index];});if(!this._tag.errors){this._tag.errors=[];}if(strict){utility.throwError(msg);}this._tag.errors.push(msg);return recoverable;};TagParser.prototype.parseType=function(){// type required titles\nif(isTypeParameterRequired(this._title)){try{this._tag.type=parseType(this._title,this._last);if(!this._tag.type){if(!isParamTitle(this._title)&&!isReturnTitle(this._title)){if(!this.addError('Missing or invalid tag type')){return false;}}}}catch(error){this._tag.type=null;if(!this.addError(error.message)){return false;}}}else if(isAllowedType(this._title)){// optional types\ntry{this._tag.type=parseType(this._title,this._last);}catch(e){//For optional types, lets drop the thrown error when we hit the end of the file\n}}return true;};TagParser.prototype._parseNamePath=function(optional){var name;name=parseName(this._last,sloppy&&isAllowedOptional(this._title),true);if(!name){if(!optional){if(!this.addError('Missing or invalid tag name')){return false;}}}this._tag.name=name;return true;};TagParser.prototype.parseNamePath=function(){return this._parseNamePath(false);};TagParser.prototype.parseNamePathOptional=function(){return this._parseNamePath(true);};TagParser.prototype.parseName=function(){var assign,name;// param, property requires name\nif(isAllowedName(this._title)){this._tag.name=parseName(this._last,sloppy&&isAllowedOptional(this._title),isAllowedNested(this._title));if(!this._tag.name){if(!isNameParameterRequired(this._title)){return true;}// it's possible the name has already been parsed but interpreted as a type\n// it's also possible this is a sloppy declaration, in which case it will be\n// fixed at the end\nif(isParamTitle(this._title)&&this._tag.type&&this._tag.type.name){this._extra.name=this._tag.type;this._tag.name=this._tag.type.name;this._tag.type=null;}else{if(!this.addError('Missing or invalid tag name')){return false;}}}else{name=this._tag.name;if(name.charAt(0)==='['&&name.charAt(name.length-1)===']'){// extract the default value if there is one\n// example: @param {string} [somebody=John Doe] description\nassign=name.substring(1,name.length-1).split('=');if(assign[1]){this._tag['default']=assign[1];}this._tag.name=assign[0];// convert to an optional type\nif(this._tag.type&&this._tag.type.type!=='OptionalType'){this._tag.type={type:'OptionalType',expression:this._tag.type};}}}}return true;};TagParser.prototype.parseDescription=function parseDescription(){var description=trim(sliceSource(source,index,this._last));if(description){if(/^-\\s+/.test(description)){description=description.substring(2);}this._tag.description=description;}return true;};TagParser.prototype.parseCaption=function parseDescription(){var description=trim(sliceSource(source,index,this._last));var captionStartTag='<caption>';var captionEndTag='</caption>';var captionStart=description.indexOf(captionStartTag);var captionEnd=description.indexOf(captionEndTag);if(captionStart>=0&&captionEnd>=0){this._tag.caption=trim(description.substring(captionStart+captionStartTag.length,captionEnd));this._tag.description=trim(description.substring(captionEnd+captionEndTag.length));}else{this._tag.description=description;}return true;};TagParser.prototype.parseKind=function parseKind(){var kind,kinds;kinds={'class':true,'constant':true,'event':true,'external':true,'file':true,'function':true,'member':true,'mixin':true,'module':true,'namespace':true,'typedef':true};kind=trim(sliceSource(source,index,this._last));this._tag.kind=kind;if(!hasOwnProperty(kinds,kind)){if(!this.addError('Invalid kind name \\'%0\\'',kind)){return false;}}return true;};TagParser.prototype.parseAccess=function parseAccess(){var access;access=trim(sliceSource(source,index,this._last));this._tag.access=access;if(access!=='private'&&access!=='protected'&&access!=='public'){if(!this.addError('Invalid access name \\'%0\\'',access)){return false;}}return true;};TagParser.prototype.parseThis=function parseAccess(){// this name may be a name expression (e.g. {foo.bar})\n// or a name path (e.g. foo.bar)\nvar value=trim(sliceSource(source,index,this._last));if(value&&value.charAt(0)==='{'){var gotType=this.parseType();if(gotType&&this._tag.type.type==='NameExpression'){this._tag.name=this._tag.type.name;return true;}else{return this.addError('Invalid name for this');}}else{return this.parseNamePath();}};TagParser.prototype.parseVariation=function parseVariation(){var variation,text;text=trim(sliceSource(source,index,this._last));variation=parseFloat(text,10);this._tag.variation=variation;if(isNaN(variation)){if(!this.addError('Invalid variation \\'%0\\'',text)){return false;}}return true;};TagParser.prototype.ensureEnd=function(){var shouldBeEmpty=trim(sliceSource(source,index,this._last));if(shouldBeEmpty){if(!this.addError('Unknown content \\'%0\\'',shouldBeEmpty)){return false;}}return true;};TagParser.prototype.epilogue=function epilogue(){var description;description=this._tag.description;// un-fix potentially sloppy declaration\nif(isAllowedOptional(this._title)&&!this._tag.type&&description&&description.charAt(0)==='['){this._tag.type=this._extra.name;if(!this._tag.name){this._tag.name=undefined;}if(!sloppy){if(!this.addError('Missing or invalid tag name')){return false;}}}return true;};Rules={// http://usejsdoc.org/tags-access.html\n'access':['parseAccess'],// http://usejsdoc.org/tags-alias.html\n'alias':['parseNamePath','ensureEnd'],// http://usejsdoc.org/tags-augments.html\n'augments':['parseType','parseNamePathOptional','ensureEnd'],// http://usejsdoc.org/tags-constructor.html\n'constructor':['parseType','parseNamePathOptional','ensureEnd'],// Synonym: http://usejsdoc.org/tags-constructor.html\n'class':['parseType','parseNamePathOptional','ensureEnd'],// Synonym: http://usejsdoc.org/tags-extends.html\n'extends':['parseType','parseNamePathOptional','ensureEnd'],// http://usejsdoc.org/tags-example.html\n'example':['parseCaption'],// http://usejsdoc.org/tags-deprecated.html\n'deprecated':['parseDescription'],// http://usejsdoc.org/tags-global.html\n'global':['ensureEnd'],// http://usejsdoc.org/tags-inner.html\n'inner':['ensureEnd'],// http://usejsdoc.org/tags-instance.html\n'instance':['ensureEnd'],// http://usejsdoc.org/tags-kind.html\n'kind':['parseKind'],// http://usejsdoc.org/tags-mixes.html\n'mixes':['parseNamePath','ensureEnd'],// http://usejsdoc.org/tags-mixin.html\n'mixin':['parseNamePathOptional','ensureEnd'],// http://usejsdoc.org/tags-member.html\n'member':['parseType','parseNamePathOptional','ensureEnd'],// http://usejsdoc.org/tags-method.html\n'method':['parseNamePathOptional','ensureEnd'],// http://usejsdoc.org/tags-module.html\n'module':['parseType','parseNamePathOptional','ensureEnd'],// Synonym: http://usejsdoc.org/tags-method.html\n'func':['parseNamePathOptional','ensureEnd'],// Synonym: http://usejsdoc.org/tags-method.html\n'function':['parseNamePathOptional','ensureEnd'],// Synonym: http://usejsdoc.org/tags-member.html\n'var':['parseType','parseNamePathOptional','ensureEnd'],// http://usejsdoc.org/tags-name.html\n'name':['parseNamePath','ensureEnd'],// http://usejsdoc.org/tags-namespace.html\n'namespace':['parseType','parseNamePathOptional','ensureEnd'],// http://usejsdoc.org/tags-private.html\n'private':['parseType','parseDescription'],// http://usejsdoc.org/tags-protected.html\n'protected':['parseType','parseDescription'],// http://usejsdoc.org/tags-public.html\n'public':['parseType','parseDescription'],// http://usejsdoc.org/tags-readonly.html\n'readonly':['ensureEnd'],// http://usejsdoc.org/tags-requires.html\n'requires':['parseNamePath','ensureEnd'],// http://usejsdoc.org/tags-since.html\n'since':['parseDescription'],// http://usejsdoc.org/tags-static.html\n'static':['ensureEnd'],// http://usejsdoc.org/tags-summary.html\n'summary':['parseDescription'],// http://usejsdoc.org/tags-this.html\n'this':['parseThis','ensureEnd'],// http://usejsdoc.org/tags-todo.html\n'todo':['parseDescription'],// http://usejsdoc.org/tags-typedef.html\n'typedef':['parseType','parseNamePathOptional'],// http://usejsdoc.org/tags-variation.html\n'variation':['parseVariation'],// http://usejsdoc.org/tags-version.html\n'version':['parseDescription']};TagParser.prototype.parse=function parse(){var i,iz,sequences,method;// empty title\nif(!this._title){if(!this.addError('Missing or invalid title')){return null;}}// Seek to content last index.\nthis._last=seekContent(this._title);if(hasOwnProperty(Rules,this._title)){sequences=Rules[this._title];}else{// default sequences\nsequences=['parseType','parseName','parseDescription','epilogue'];}for(i=0,iz=sequences.length;i<iz;++i){method=sequences[i];if(!this[method]()){return null;}}return this._tag;};function parseTag(options){var title,parser,tag;// skip to tag\nif(!skipToTag()){return null;}// scan title\ntitle=scanTitle();// construct tag parser\nparser=new TagParser(options,title);tag=parser.parse();// Seek global index to end of this tag.\nwhile(index<parser._last){advance();}return tag;}//\n// Parse JSDoc\n//\nfunction scanJSDocDescription(preserveWhitespace){var description='',ch,atAllowed;atAllowed=true;while(index<length){ch=source.charCodeAt(index);if(atAllowed&&ch===0x40/* '@' */){break;}if(esutils.code.isLineTerminator(ch)){atAllowed=true;}else if(atAllowed&&!esutils.code.isWhiteSpace(ch)){atAllowed=false;}description+=advance();}return preserveWhitespace?description:trim(description);}function parse(comment,options){var tags=[],tag,description,interestingTags,i,iz;if(options===undefined){options={};}if(typeof options.unwrap==='boolean'&&options.unwrap){source=unwrapComment(comment);}else{source=comment;}// array of relevant tags\nif(options.tags){if(isArray(options.tags)){interestingTags={};for(i=0,iz=options.tags.length;i<iz;i++){if(typeof options.tags[i]==='string'){interestingTags[options.tags[i]]=true;}else{utility.throwError('Invalid \"tags\" parameter: '+options.tags);}}}else{utility.throwError('Invalid \"tags\" parameter: '+options.tags);}}length=source.length;index=0;lineNumber=0;recoverable=options.recoverable;sloppy=options.sloppy;strict=options.strict;description=scanJSDocDescription(options.preserveWhitespace);while(true){tag=parseTag(options);if(!tag){break;}if(!interestingTags||interestingTags.hasOwnProperty(tag.title)){tags.push(tag);}}return{description:description,tags:tags};}exports.parse=parse;})(jsdoc={});exports.version=utility.VERSION;exports.parse=jsdoc.parse;exports.parseType=typed.parseType;exports.parseParamType=typed.parseParamType;exports.unwrapComment=unwrapComment;exports.Syntax=shallowCopy(typed.Syntax);exports.Error=utility.DoctrineError;exports.type={Syntax:exports.Syntax,parseType:typed.parseType,parseParamType:typed.parseParamType,stringify:typed.stringify};})();/* vim: set sw=4 ts=4 et tw=80 : */},{\"./typed\":183,\"./utility\":184,\"esutils\":365,\"isarray\":185}],183:[function(require,module,exports){/*\n * @fileoverview Type expression parser.\n * @author Yusuke Suzuki <utatane.tea@gmail.com>\n * @author Dan Tao <daniel.tao@gmail.com>\n * @author Andrew Eisenberg <andrew@eisenberg.as>\n */// \"typed\", the Type Expression Parser for doctrine.\n(function(){'use strict';var Syntax,Token,source,length,index,previous,token,value,esutils,utility;esutils=require(\"esutils\");utility=require(\"./utility\");Syntax={NullableLiteral:'NullableLiteral',AllLiteral:'AllLiteral',NullLiteral:'NullLiteral',UndefinedLiteral:'UndefinedLiteral',VoidLiteral:'VoidLiteral',UnionType:'UnionType',ArrayType:'ArrayType',RecordType:'RecordType',FieldType:'FieldType',FunctionType:'FunctionType',ParameterType:'ParameterType',RestType:'RestType',NonNullableType:'NonNullableType',OptionalType:'OptionalType',NullableType:'NullableType',NameExpression:'NameExpression',TypeApplication:'TypeApplication',StringLiteralType:'StringLiteralType',NumericLiteralType:'NumericLiteralType',BooleanLiteralType:'BooleanLiteralType'};Token={ILLEGAL:0,// ILLEGAL\nDOT_LT:1,// .<\nREST:2,// ...\nLT:3,// <\nGT:4,// >\nLPAREN:5,// (\nRPAREN:6,// )\nLBRACE:7,// {\nRBRACE:8,// }\nLBRACK:9,// [\nRBRACK:10,// ]\nCOMMA:11,// ,\nCOLON:12,// :\nSTAR:13,// *\nPIPE:14,// |\nQUESTION:15,// ?\nBANG:16,// !\nEQUAL:17,// =\nNAME:18,// name token\nSTRING:19,// string\nNUMBER:20,// number\nEOF:21};function isTypeName(ch){return'><(){}[],:*|?!='.indexOf(String.fromCharCode(ch))===-1&&!esutils.code.isWhiteSpace(ch)&&!esutils.code.isLineTerminator(ch);}function Context(previous,index,token,value){this._previous=previous;this._index=index;this._token=token;this._value=value;}Context.prototype.restore=function(){previous=this._previous;index=this._index;token=this._token;value=this._value;};Context.save=function(){return new Context(previous,index,token,value);};function advance(){var ch=source.charAt(index);index+=1;return ch;}function scanHexEscape(prefix){var i,len,ch,code=0;len=prefix==='u'?4:2;for(i=0;i<len;++i){if(index<length&&esutils.code.isHexDigit(source.charCodeAt(index))){ch=advance();code=code*16+'0123456789abcdef'.indexOf(ch.toLowerCase());}else{return'';}}return String.fromCharCode(code);}function scanString(){var str='',quote,ch,code,unescaped,restore;//TODO review removal octal = false\nquote=source.charAt(index);++index;while(index<length){ch=advance();if(ch===quote){quote='';break;}else if(ch==='\\\\'){ch=advance();if(!esutils.code.isLineTerminator(ch.charCodeAt(0))){switch(ch){case'n':str+='\\n';break;case'r':str+='\\r';break;case't':str+='\\t';break;case'u':case'x':restore=index;unescaped=scanHexEscape(ch);if(unescaped){str+=unescaped;}else{index=restore;str+=ch;}break;case'b':str+='\\b';break;case'f':str+='\\f';break;case'v':str+='\\v';break;default:if(esutils.code.isOctalDigit(ch.charCodeAt(0))){code='01234567'.indexOf(ch);// \\0 is not octal escape sequence\n// Deprecating unused code. TODO review removal\n//if (code !== 0) {\n//    octal = true;\n//}\nif(index<length&&esutils.code.isOctalDigit(source.charCodeAt(index))){//TODO Review Removal octal = true;\ncode=code*8+'01234567'.indexOf(advance());// 3 digits are only allowed when string starts\n// with 0, 1, 2, 3\nif('0123'.indexOf(ch)>=0&&index<length&&esutils.code.isOctalDigit(source.charCodeAt(index))){code=code*8+'01234567'.indexOf(advance());}}str+=String.fromCharCode(code);}else{str+=ch;}break;}}else{if(ch==='\\r'&&source.charCodeAt(index)===0x0A/* '\\n' */){++index;}}}else if(esutils.code.isLineTerminator(ch.charCodeAt(0))){break;}else{str+=ch;}}if(quote!==''){utility.throwError('unexpected quote');}value=str;return Token.STRING;}function scanNumber(){var number,ch;number='';ch=source.charCodeAt(index);if(ch!==0x2E/* '.' */){number=advance();ch=source.charCodeAt(index);if(number==='0'){if(ch===0x78/* 'x' */||ch===0x58/* 'X' */){number+=advance();while(index<length){ch=source.charCodeAt(index);if(!esutils.code.isHexDigit(ch)){break;}number+=advance();}if(number.length<=2){// only 0x\nutility.throwError('unexpected token');}if(index<length){ch=source.charCodeAt(index);if(esutils.code.isIdentifierStartES5(ch)){utility.throwError('unexpected token');}}value=parseInt(number,16);return Token.NUMBER;}if(esutils.code.isOctalDigit(ch)){number+=advance();while(index<length){ch=source.charCodeAt(index);if(!esutils.code.isOctalDigit(ch)){break;}number+=advance();}if(index<length){ch=source.charCodeAt(index);if(esutils.code.isIdentifierStartES5(ch)||esutils.code.isDecimalDigit(ch)){utility.throwError('unexpected token');}}value=parseInt(number,8);return Token.NUMBER;}if(esutils.code.isDecimalDigit(ch)){utility.throwError('unexpected token');}}while(index<length){ch=source.charCodeAt(index);if(!esutils.code.isDecimalDigit(ch)){break;}number+=advance();}}if(ch===0x2E/* '.' */){number+=advance();while(index<length){ch=source.charCodeAt(index);if(!esutils.code.isDecimalDigit(ch)){break;}number+=advance();}}if(ch===0x65/* 'e' */||ch===0x45/* 'E' */){number+=advance();ch=source.charCodeAt(index);if(ch===0x2B/* '+' */||ch===0x2D/* '-' */){number+=advance();}ch=source.charCodeAt(index);if(esutils.code.isDecimalDigit(ch)){number+=advance();while(index<length){ch=source.charCodeAt(index);if(!esutils.code.isDecimalDigit(ch)){break;}number+=advance();}}else{utility.throwError('unexpected token');}}if(index<length){ch=source.charCodeAt(index);if(esutils.code.isIdentifierStartES5(ch)){utility.throwError('unexpected token');}}value=parseFloat(number);return Token.NUMBER;}function scanTypeName(){var ch,ch2;value=advance();while(index<length&&isTypeName(source.charCodeAt(index))){ch=source.charCodeAt(index);if(ch===0x2E/* '.' */){if(index+1>=length){return Token.ILLEGAL;}ch2=source.charCodeAt(index+1);if(ch2===0x3C/* '<' */){break;}}value+=advance();}return Token.NAME;}function next(){var ch;previous=index;while(index<length&&esutils.code.isWhiteSpace(source.charCodeAt(index))){advance();}if(index>=length){token=Token.EOF;return token;}ch=source.charCodeAt(index);switch(ch){case 0x27:/* ''' */case 0x22:/* '\"' */token=scanString();return token;case 0x3A:/* ':' */advance();token=Token.COLON;return token;case 0x2C:/* ',' */advance();token=Token.COMMA;return token;case 0x28:/* '(' */advance();token=Token.LPAREN;return token;case 0x29:/* ')' */advance();token=Token.RPAREN;return token;case 0x5B:/* '[' */advance();token=Token.LBRACK;return token;case 0x5D:/* ']' */advance();token=Token.RBRACK;return token;case 0x7B:/* '{' */advance();token=Token.LBRACE;return token;case 0x7D:/* '}' */advance();token=Token.RBRACE;return token;case 0x2E:/* '.' */if(index+1<length){ch=source.charCodeAt(index+1);if(ch===0x3C/* '<' */){advance();// '.'\nadvance();// '<'\ntoken=Token.DOT_LT;return token;}if(ch===0x2E/* '.' */&&index+2<length&&source.charCodeAt(index+2)===0x2E/* '.' */){advance();// '.'\nadvance();// '.'\nadvance();// '.'\ntoken=Token.REST;return token;}if(esutils.code.isDecimalDigit(ch)){token=scanNumber();return token;}}token=Token.ILLEGAL;return token;case 0x3C:/* '<' */advance();token=Token.LT;return token;case 0x3E:/* '>' */advance();token=Token.GT;return token;case 0x2A:/* '*' */advance();token=Token.STAR;return token;case 0x7C:/* '|' */advance();token=Token.PIPE;return token;case 0x3F:/* '?' */advance();token=Token.QUESTION;return token;case 0x21:/* '!' */advance();token=Token.BANG;return token;case 0x3D:/* '=' */advance();token=Token.EQUAL;return token;case 0x2D:/* '-' */token=scanNumber();return token;default:if(esutils.code.isDecimalDigit(ch)){token=scanNumber();return token;}// type string permits following case,\n//\n// namespace.module.MyClass\n//\n// this reduced 1 token TK_NAME\nutility.assert(isTypeName(ch));token=scanTypeName();return token;}}function consume(target,text){utility.assert(token===target,text||'consumed token not matched');next();}function expect(target,message){if(token!==target){utility.throwError(message||'unexpected token');}next();}// UnionType := '(' TypeUnionList ')'\n//\n// TypeUnionList :=\n//     <<empty>>\n//   | NonemptyTypeUnionList\n//\n// NonemptyTypeUnionList :=\n//     TypeExpression\n//   | TypeExpression '|' NonemptyTypeUnionList\nfunction parseUnionType(){var elements;consume(Token.LPAREN,'UnionType should start with (');elements=[];if(token!==Token.RPAREN){while(true){elements.push(parseTypeExpression());if(token===Token.RPAREN){break;}expect(Token.PIPE);}}consume(Token.RPAREN,'UnionType should end with )');return{type:Syntax.UnionType,elements:elements};}// ArrayType := '[' ElementTypeList ']'\n//\n// ElementTypeList :=\n//     <<empty>>\n//  | TypeExpression\n//  | '...' TypeExpression\n//  | TypeExpression ',' ElementTypeList\nfunction parseArrayType(){var elements;consume(Token.LBRACK,'ArrayType should start with [');elements=[];while(token!==Token.RBRACK){if(token===Token.REST){consume(Token.REST);elements.push({type:Syntax.RestType,expression:parseTypeExpression()});break;}else{elements.push(parseTypeExpression());}if(token!==Token.RBRACK){expect(Token.COMMA);}}expect(Token.RBRACK);return{type:Syntax.ArrayType,elements:elements};}function parseFieldName(){var v=value;if(token===Token.NAME||token===Token.STRING){next();return v;}if(token===Token.NUMBER){consume(Token.NUMBER);return String(v);}utility.throwError('unexpected token');}// FieldType :=\n//     FieldName\n//   | FieldName ':' TypeExpression\n//\n// FieldName :=\n//     NameExpression\n//   | StringLiteral\n//   | NumberLiteral\n//   | ReservedIdentifier\nfunction parseFieldType(){var key;key=parseFieldName();if(token===Token.COLON){consume(Token.COLON);return{type:Syntax.FieldType,key:key,value:parseTypeExpression()};}return{type:Syntax.FieldType,key:key,value:null};}// RecordType := '{' FieldTypeList '}'\n//\n// FieldTypeList :=\n//     <<empty>>\n//   | FieldType\n//   | FieldType ',' FieldTypeList\nfunction parseRecordType(){var fields;consume(Token.LBRACE,'RecordType should start with {');fields=[];if(token===Token.COMMA){consume(Token.COMMA);}else{while(token!==Token.RBRACE){fields.push(parseFieldType());if(token!==Token.RBRACE){expect(Token.COMMA);}}}expect(Token.RBRACE);return{type:Syntax.RecordType,fields:fields};}// NameExpression :=\n//    Identifier\n//  | TagIdentifier ':' Identifier\n//\n// Tag identifier is one of \"module\", \"external\" or \"event\"\n// Identifier is the same as Token.NAME, including any dots, something like\n// namespace.module.MyClass\nfunction parseNameExpression(){var name=value;expect(Token.NAME);if(token===Token.COLON&&(name==='module'||name==='external'||name==='event')){consume(Token.COLON);name+=':'+value;expect(Token.NAME);}return{type:Syntax.NameExpression,name:name};}// TypeExpressionList :=\n//     TopLevelTypeExpression\n//   | TopLevelTypeExpression ',' TypeExpressionList\nfunction parseTypeExpressionList(){var elements=[];elements.push(parseTop());while(token===Token.COMMA){consume(Token.COMMA);elements.push(parseTop());}return elements;}// TypeName :=\n//     NameExpression\n//   | NameExpression TypeApplication\n//\n// TypeApplication :=\n//     '.<' TypeExpressionList '>'\n//   | '<' TypeExpressionList '>'   // this is extension of doctrine\nfunction parseTypeName(){var expr,applications;expr=parseNameExpression();if(token===Token.DOT_LT||token===Token.LT){next();applications=parseTypeExpressionList();expect(Token.GT);return{type:Syntax.TypeApplication,expression:expr,applications:applications};}return expr;}// ResultType :=\n//     <<empty>>\n//   | ':' void\n//   | ':' TypeExpression\n//\n// BNF is above\n// but, we remove <<empty>> pattern, so token is always TypeToken::COLON\nfunction parseResultType(){consume(Token.COLON,'ResultType should start with :');if(token===Token.NAME&&value==='void'){consume(Token.NAME);return{type:Syntax.VoidLiteral};}return parseTypeExpression();}// ParametersType :=\n//     RestParameterType\n//   | NonRestParametersType\n//   | NonRestParametersType ',' RestParameterType\n//\n// RestParameterType :=\n//     '...'\n//     '...' Identifier\n//\n// NonRestParametersType :=\n//     ParameterType ',' NonRestParametersType\n//   | ParameterType\n//   | OptionalParametersType\n//\n// OptionalParametersType :=\n//     OptionalParameterType\n//   | OptionalParameterType, OptionalParametersType\n//\n// OptionalParameterType := ParameterType=\n//\n// ParameterType := TypeExpression | Identifier ':' TypeExpression\n//\n// Identifier is \"new\" or \"this\"\nfunction parseParametersType(){var params=[],optionalSequence=false,expr,rest=false;while(token!==Token.RPAREN){if(token===Token.REST){// RestParameterType\nconsume(Token.REST);rest=true;}expr=parseTypeExpression();if(expr.type===Syntax.NameExpression&&token===Token.COLON){// Identifier ':' TypeExpression\nconsume(Token.COLON);expr={type:Syntax.ParameterType,name:expr.name,expression:parseTypeExpression()};}if(token===Token.EQUAL){consume(Token.EQUAL);expr={type:Syntax.OptionalType,expression:expr};optionalSequence=true;}else{if(optionalSequence){utility.throwError('unexpected token');}}if(rest){expr={type:Syntax.RestType,expression:expr};}params.push(expr);if(token!==Token.RPAREN){expect(Token.COMMA);}}return params;}// FunctionType := 'function' FunctionSignatureType\n//\n// FunctionSignatureType :=\n//   | TypeParameters '(' ')' ResultType\n//   | TypeParameters '(' ParametersType ')' ResultType\n//   | TypeParameters '(' 'this' ':' TypeName ')' ResultType\n//   | TypeParameters '(' 'this' ':' TypeName ',' ParametersType ')' ResultType\nfunction parseFunctionType(){var isNew,thisBinding,params,result,fnType;utility.assert(token===Token.NAME&&value==='function','FunctionType should start with \\'function\\'');consume(Token.NAME);// Google Closure Compiler is not implementing TypeParameters.\n// So we do not. if we don't get '(', we see it as error.\nexpect(Token.LPAREN);isNew=false;params=[];thisBinding=null;if(token!==Token.RPAREN){// ParametersType or 'this'\nif(token===Token.NAME&&(value==='this'||value==='new')){// 'this' or 'new'\n// 'new' is Closure Compiler extension\nisNew=value==='new';consume(Token.NAME);expect(Token.COLON);thisBinding=parseTypeName();if(token===Token.COMMA){consume(Token.COMMA);params=parseParametersType();}}else{params=parseParametersType();}}expect(Token.RPAREN);result=null;if(token===Token.COLON){result=parseResultType();}fnType={type:Syntax.FunctionType,params:params,result:result};if(thisBinding){// avoid adding null 'new' and 'this' properties\nfnType['this']=thisBinding;if(isNew){fnType['new']=true;}}return fnType;}// BasicTypeExpression :=\n//     '*'\n//   | 'null'\n//   | 'undefined'\n//   | TypeName\n//   | FunctionType\n//   | UnionType\n//   | RecordType\n//   | ArrayType\nfunction parseBasicTypeExpression(){var context;switch(token){case Token.STAR:consume(Token.STAR);return{type:Syntax.AllLiteral};case Token.LPAREN:return parseUnionType();case Token.LBRACK:return parseArrayType();case Token.LBRACE:return parseRecordType();case Token.NAME:if(value==='null'){consume(Token.NAME);return{type:Syntax.NullLiteral};}if(value==='undefined'){consume(Token.NAME);return{type:Syntax.UndefinedLiteral};}if(value==='true'||value==='false'){consume(Token.NAME);return{type:Syntax.BooleanLiteralType,value:value==='true'};}context=Context.save();if(value==='function'){try{return parseFunctionType();}catch(e){context.restore();}}return parseTypeName();case Token.STRING:next();return{type:Syntax.StringLiteralType,value:value};case Token.NUMBER:next();return{type:Syntax.NumericLiteralType,value:value};default:utility.throwError('unexpected token');}}// TypeExpression :=\n//     BasicTypeExpression\n//   | '?' BasicTypeExpression\n//   | '!' BasicTypeExpression\n//   | BasicTypeExpression '?'\n//   | BasicTypeExpression '!'\n//   | '?'\n//   | BasicTypeExpression '[]'\nfunction parseTypeExpression(){var expr;if(token===Token.QUESTION){consume(Token.QUESTION);if(token===Token.COMMA||token===Token.EQUAL||token===Token.RBRACE||token===Token.RPAREN||token===Token.PIPE||token===Token.EOF||token===Token.RBRACK||token===Token.GT){return{type:Syntax.NullableLiteral};}return{type:Syntax.NullableType,expression:parseBasicTypeExpression(),prefix:true};}if(token===Token.BANG){consume(Token.BANG);return{type:Syntax.NonNullableType,expression:parseBasicTypeExpression(),prefix:true};}expr=parseBasicTypeExpression();if(token===Token.BANG){consume(Token.BANG);return{type:Syntax.NonNullableType,expression:expr,prefix:false};}if(token===Token.QUESTION){consume(Token.QUESTION);return{type:Syntax.NullableType,expression:expr,prefix:false};}if(token===Token.LBRACK){consume(Token.LBRACK);expect(Token.RBRACK,'expected an array-style type declaration ('+value+'[])');return{type:Syntax.TypeApplication,expression:{type:Syntax.NameExpression,name:'Array'},applications:[expr]};}return expr;}// TopLevelTypeExpression :=\n//      TypeExpression\n//    | TypeUnionList\n//\n// This rule is Google Closure Compiler extension, not ES4\n// like,\n//   { number | string }\n// If strict to ES4, we should write it as\n//   { (number|string) }\nfunction parseTop(){var expr,elements;expr=parseTypeExpression();if(token!==Token.PIPE){return expr;}elements=[expr];consume(Token.PIPE);while(true){elements.push(parseTypeExpression());if(token!==Token.PIPE){break;}consume(Token.PIPE);}return{type:Syntax.UnionType,elements:elements};}function parseTopParamType(){var expr;if(token===Token.REST){consume(Token.REST);return{type:Syntax.RestType,expression:parseTop()};}expr=parseTop();if(token===Token.EQUAL){consume(Token.EQUAL);return{type:Syntax.OptionalType,expression:expr};}return expr;}function parseType(src,opt){var expr;source=src;length=source.length;index=0;previous=0;next();expr=parseTop();if(opt&&opt.midstream){return{expression:expr,index:previous};}if(token!==Token.EOF){utility.throwError('not reach to EOF');}return expr;}function parseParamType(src,opt){var expr;source=src;length=source.length;index=0;previous=0;next();expr=parseTopParamType();if(opt&&opt.midstream){return{expression:expr,index:previous};}if(token!==Token.EOF){utility.throwError('not reach to EOF');}return expr;}function stringifyImpl(node,compact,topLevel){var result,i,iz;switch(node.type){case Syntax.NullableLiteral:result='?';break;case Syntax.AllLiteral:result='*';break;case Syntax.NullLiteral:result='null';break;case Syntax.UndefinedLiteral:result='undefined';break;case Syntax.VoidLiteral:result='void';break;case Syntax.UnionType:if(!topLevel){result='(';}else{result='';}for(i=0,iz=node.elements.length;i<iz;++i){result+=stringifyImpl(node.elements[i],compact);if(i+1!==iz){result+='|';}}if(!topLevel){result+=')';}break;case Syntax.ArrayType:result='[';for(i=0,iz=node.elements.length;i<iz;++i){result+=stringifyImpl(node.elements[i],compact);if(i+1!==iz){result+=compact?',':', ';}}result+=']';break;case Syntax.RecordType:result='{';for(i=0,iz=node.fields.length;i<iz;++i){result+=stringifyImpl(node.fields[i],compact);if(i+1!==iz){result+=compact?',':', ';}}result+='}';break;case Syntax.FieldType:if(node.value){result=node.key+(compact?':':': ')+stringifyImpl(node.value,compact);}else{result=node.key;}break;case Syntax.FunctionType:result=compact?'function(':'function (';if(node['this']){if(node['new']){result+=compact?'new:':'new: ';}else{result+=compact?'this:':'this: ';}result+=stringifyImpl(node['this'],compact);if(node.params.length!==0){result+=compact?',':', ';}}for(i=0,iz=node.params.length;i<iz;++i){result+=stringifyImpl(node.params[i],compact);if(i+1!==iz){result+=compact?',':', ';}}result+=')';if(node.result){result+=(compact?':':': ')+stringifyImpl(node.result,compact);}break;case Syntax.ParameterType:result=node.name+(compact?':':': ')+stringifyImpl(node.expression,compact);break;case Syntax.RestType:result='...';if(node.expression){result+=stringifyImpl(node.expression,compact);}break;case Syntax.NonNullableType:if(node.prefix){result='!'+stringifyImpl(node.expression,compact);}else{result=stringifyImpl(node.expression,compact)+'!';}break;case Syntax.OptionalType:result=stringifyImpl(node.expression,compact)+'=';break;case Syntax.NullableType:if(node.prefix){result='?'+stringifyImpl(node.expression,compact);}else{result=stringifyImpl(node.expression,compact)+'?';}break;case Syntax.NameExpression:result=node.name;break;case Syntax.TypeApplication:result=stringifyImpl(node.expression,compact)+'.<';for(i=0,iz=node.applications.length;i<iz;++i){result+=stringifyImpl(node.applications[i],compact);if(i+1!==iz){result+=compact?',':', ';}}result+='>';break;case Syntax.StringLiteralType:result='\"'+node.value+'\"';break;case Syntax.NumericLiteralType:result=String(node.value);break;case Syntax.BooleanLiteralType:result=String(node.value);break;default:utility.throwError('Unknown type '+node.type);}return result;}function stringify(node,options){if(options==null){options={};}return stringifyImpl(node,options.compact,options.topLevel);}exports.parseType=parseType;exports.parseParamType=parseParamType;exports.stringify=stringify;exports.Syntax=Syntax;})();/* vim: set sw=4 ts=4 et tw=80 : */},{\"./utility\":184,\"esutils\":365}],184:[function(require,module,exports){/*\n * @fileoverview Utilities for Doctrine\n * @author Yusuke Suzuki <utatane.tea@gmail.com>\n */(function(){'use strict';var VERSION;VERSION=require(\"../package.json\").version;exports.VERSION=VERSION;function DoctrineError(message){this.name='DoctrineError';this.message=message;}DoctrineError.prototype=function(){var Middle=function Middle(){};Middle.prototype=Error.prototype;return new Middle();}();DoctrineError.prototype.constructor=DoctrineError;exports.DoctrineError=DoctrineError;function throwError(message){throw new DoctrineError(message);}exports.throwError=throwError;exports.assert=require(\"assert\");})();/* vim: set sw=4 ts=4 et tw=80 : */},{\"../package.json\":186,\"assert\":11}],185:[function(require,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=='[object Array]';};},{}],186:[function(require,module,exports){module.exports={\"name\":\"doctrine\",\"description\":\"JSDoc parser\",\"homepage\":\"https://github.com/eslint/doctrine\",\"main\":\"lib/doctrine.js\",\"version\":\"2.0.0\",\"engines\":{\"node\":\">=0.10.0\"},\"directories\":{\"lib\":\"./lib\"},\"files\":[\"lib\",\"LICENSE.BSD\",\"LICENSE.closure-compiler\",\"LICENSE.esprima\",\"README.md\"],\"maintainers\":[{\"name\":\"Nicholas C. Zakas\",\"email\":\"nicholas+npm@nczconsulting.com\",\"web\":\"https://www.nczonline.net\"},{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"web\":\"https://github.com/Constellation\"}],\"repository\":\"eslint/doctrine\",\"devDependencies\":{\"coveralls\":\"^2.11.2\",\"dateformat\":\"^1.0.11\",\"eslint\":\"^1.10.3\",\"eslint-release\":\"^0.10.0\",\"istanbul\":\"^0.4.1\",\"linefix\":\"^0.1.1\",\"mocha\":\"^2.3.3\",\"npm-license\":\"^0.3.1\",\"semver\":\"^5.0.3\",\"shelljs\":\"^0.5.3\",\"shelljs-nodecli\":\"^0.1.1\",\"should\":\"^5.0.1\"},\"license\":\"Apache-2.0\",\"scripts\":{\"test\":\"npm run lint && node Makefile.js test\",\"lint\":\"eslint lib/\",\"release\":\"eslint-release\",\"ci-release\":\"eslint-ci-release\",\"alpharelease\":\"eslint-prerelease alpha\",\"betarelease\":\"eslint-prerelease beta\"},\"dependencies\":{\"esutils\":\"^2.0.2\",\"isarray\":\"^1.0.0\"}};},{}],187:[function(require,module,exports){'use strict';var $isNaN=require(\"./helpers/isNaN\");var $isFinite=require(\"./helpers/isFinite\");var sign=require(\"./helpers/sign\");var mod=require(\"./helpers/mod\");var IsCallable=require(\"is-callable\");var toPrimitive=require(\"es-to-primitive/es5\");// https://es5.github.io/#x9\nvar ES5={ToPrimitive:toPrimitive,ToBoolean:function ToBoolean(value){return Boolean(value);},ToNumber:function ToNumber(value){return Number(value);},ToInteger:function ToInteger(value){var number=this.ToNumber(value);if($isNaN(number)){return 0;}if(number===0||!$isFinite(number)){return number;}return sign(number)*Math.floor(Math.abs(number));},ToInt32:function ToInt32(x){return this.ToNumber(x)>>0;},ToUint32:function ToUint32(x){return this.ToNumber(x)>>>0;},ToUint16:function ToUint16(value){var number=this.ToNumber(value);if($isNaN(number)||number===0||!$isFinite(number)){return 0;}var posInt=sign(number)*Math.floor(Math.abs(number));return mod(posInt,0x10000);},ToString:function ToString(value){return String(value);},ToObject:function ToObject(value){this.CheckObjectCoercible(value);return Object(value);},CheckObjectCoercible:function CheckObjectCoercible(value,optMessage){/* jshint eqnull:true */if(value==null){throw new TypeError(optMessage||'Cannot call method on '+value);}return value;},IsCallable:IsCallable,SameValue:function SameValue(x,y){if(x===y){// 0 === -0, but they are not identical.\nif(x===0){return 1/x===1/y;}return true;}return $isNaN(x)&&$isNaN(y);},// http://www.ecma-international.org/ecma-262/5.1/#sec-8\nType:function Type(x){if(x===null){return'Null';}if(typeof x==='undefined'){return'Undefined';}if(typeof x==='function'||(typeof x===\"undefined\"?\"undefined\":(0,_typeof6.default)(x))==='object'){return'Object';}if(typeof x==='number'){return'Number';}if(typeof x==='boolean'){return'Boolean';}if(typeof x==='string'){return'String';}}};module.exports=ES5;},{\"./helpers/isFinite\":190,\"./helpers/isNaN\":191,\"./helpers/mod\":193,\"./helpers/sign\":194,\"es-to-primitive/es5\":195,\"is-callable\":379}],188:[function(require,module,exports){'use strict';var toStr=Object.prototype.toString;var hasSymbols=typeof _symbol4.default==='function'&&(0,_typeof6.default)(_iterator22.default)==='symbol';var symbolToStr=hasSymbols?_symbol4.default.prototype.toString:toStr;var $isNaN=require(\"./helpers/isNaN\");var $isFinite=require(\"./helpers/isFinite\");var MAX_SAFE_INTEGER=_maxSafeInteger4.default||Math.pow(2,53)-1;var assign=require(\"./helpers/assign\");var sign=require(\"./helpers/sign\");var mod=require(\"./helpers/mod\");var isPrimitive=require(\"./helpers/isPrimitive\");var toPrimitive=require(\"es-to-primitive/es6\");var parseInteger=parseInt;var bind=require(\"function-bind\");var strSlice=bind.call(Function.call,String.prototype.slice);var isBinary=bind.call(Function.call,RegExp.prototype.test,/^0b[01]+$/i);var isOctal=bind.call(Function.call,RegExp.prototype.test,/^0o[0-7]+$/i);var nonWS=[\"\\x85\",\"\\u200B\",\"\\uFFFE\"].join('');var nonWSregex=new RegExp('['+nonWS+']','g');var hasNonWS=bind.call(Function.call,RegExp.prototype.test,nonWSregex);var invalidHexLiteral=/^[-+]0x[0-9a-f]+$/i;var isInvalidHexLiteral=bind.call(Function.call,RegExp.prototype.test,invalidHexLiteral);// whitespace from: http://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws=[\"\\t\\n\\x0B\\f\\r \\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\",\"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\",\"\\u2029\\uFEFF\"].join('');var trimRegex=new RegExp('(^['+ws+']+)|(['+ws+']+$)','g');var replace=bind.call(Function.call,String.prototype.replace);var trim=function trim(value){return replace(value,trimRegex,'');};var ES5=require(\"./es5\");var hasRegExpMatcher=require(\"is-regex\");// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-abstract-operations\nvar ES6=assign(assign({},ES5),{// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-call-f-v-args\nCall:function Call(F,V){var args=arguments.length>2?arguments[2]:[];if(!this.IsCallable(F)){throw new TypeError(F+' is not a function');}return F.apply(V,args);},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toprimitive\nToPrimitive:toPrimitive,// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toboolean\n// ToBoolean: ES5.ToBoolean,\n// http://www.ecma-international.org/ecma-262/6.0/#sec-tonumber\nToNumber:function ToNumber(argument){var value=isPrimitive(argument)?argument:toPrimitive(argument,'number');if((typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))==='symbol'){throw new TypeError('Cannot convert a Symbol value to a number');}if(typeof value==='string'){if(isBinary(value)){return this.ToNumber(parseInteger(strSlice(value,2),2));}else if(isOctal(value)){return this.ToNumber(parseInteger(strSlice(value,2),8));}else if(hasNonWS(value)||isInvalidHexLiteral(value)){return NaN;}else{var trimmed=trim(value);if(trimmed!==value){return this.ToNumber(trimmed);}}}return Number(value);},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tointeger\n// ToInteger: ES5.ToNumber,\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint32\n// ToInt32: ES5.ToInt32,\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint32\n// ToUint32: ES5.ToUint32,\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint16\nToInt16:function ToInt16(argument){var int16bit=this.ToUint16(argument);return int16bit>=0x8000?int16bit-0x10000:int16bit;},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint16\n// ToUint16: ES5.ToUint16,\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint8\nToInt8:function ToInt8(argument){var int8bit=this.ToUint8(argument);return int8bit>=0x80?int8bit-0x100:int8bit;},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8\nToUint8:function ToUint8(argument){var number=this.ToNumber(argument);if($isNaN(number)||number===0||!$isFinite(number)){return 0;}var posInt=sign(number)*Math.floor(Math.abs(number));return mod(posInt,0x100);},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8clamp\nToUint8Clamp:function ToUint8Clamp(argument){var number=this.ToNumber(argument);if($isNaN(number)||number<=0){return 0;}if(number>=0xFF){return 0xFF;}var f=Math.floor(argument);if(f+0.5<number){return f+1;}if(number<f+0.5){return f;}if(f%2!==0){return f+1;}return f;},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tostring\nToString:function ToString(argument){if((typeof argument===\"undefined\"?\"undefined\":(0,_typeof6.default)(argument))==='symbol'){throw new TypeError('Cannot convert a Symbol value to a string');}return String(argument);},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toobject\nToObject:function ToObject(value){this.RequireObjectCoercible(value);return Object(value);},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-topropertykey\nToPropertyKey:function ToPropertyKey(argument){var key=this.ToPrimitive(argument,String);return(typeof key===\"undefined\"?\"undefined\":(0,_typeof6.default)(key))==='symbol'?symbolToStr.call(key):this.ToString(key);},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\nToLength:function ToLength(argument){var len=this.ToInteger(argument);if(len<=0){return 0;}// includes converting -0 to +0\nif(len>MAX_SAFE_INTEGER){return MAX_SAFE_INTEGER;}return len;},// http://www.ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring\nCanonicalNumericIndexString:function CanonicalNumericIndexString(argument){if(toStr.call(argument)!=='[object String]'){throw new TypeError('must be a string');}if(argument==='-0'){return-0;}var n=this.ToNumber(argument);if(this.SameValue(this.ToString(n),argument)){return n;}return void 0;},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-requireobjectcoercible\nRequireObjectCoercible:ES5.CheckObjectCoercible,// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isarray\nIsArray:Array.isArray||function IsArray(argument){return toStr.call(argument)==='[object Array]';},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-iscallable\n// IsCallable: ES5.IsCallable,\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isconstructor\nIsConstructor:function IsConstructor(argument){return typeof argument==='function'&&!!argument.prototype;// unfortunately there's no way to truly check this without try/catch `new argument`\n},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isextensible-o\nIsExtensible:function IsExtensible(obj){if(!_preventExtensions2.default){return true;}if(isPrimitive(obj)){return false;}return(0,_isExtensible2.default)(obj);},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isinteger\nIsInteger:function IsInteger(argument){if(typeof argument!=='number'||$isNaN(argument)||!$isFinite(argument)){return false;}var abs=Math.abs(argument);return Math.floor(abs)===abs;},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-ispropertykey\nIsPropertyKey:function IsPropertyKey(argument){return typeof argument==='string'||(typeof argument===\"undefined\"?\"undefined\":(0,_typeof6.default)(argument))==='symbol';},// http://www.ecma-international.org/ecma-262/6.0/#sec-isregexp\nIsRegExp:function IsRegExp(argument){if(!argument||(typeof argument===\"undefined\"?\"undefined\":(0,_typeof6.default)(argument))!=='object'){return false;}if(hasSymbols){var isRegExp=argument[_match2.default];if(typeof isRegExp!=='undefined'){return ES5.ToBoolean(isRegExp);}}return hasRegExpMatcher(argument);},// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevalue\n// SameValue: ES5.SameValue,\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero\nSameValueZero:function SameValueZero(x,y){return x===y||$isNaN(x)&&$isNaN(y);},/**\n\t * 7.3.2 GetV (V, P)\n\t * 1. Assert: IsPropertyKey(P) is true.\n\t * 2. Let O be ToObject(V).\n\t * 3. ReturnIfAbrupt(O).\n\t * 4. Return O.[[Get]](P, V).\n\t */GetV:function GetV(V,P){// 7.3.2.1\nif(!this.IsPropertyKey(P)){throw new TypeError('Assertion failed: IsPropertyKey(P) is not true');}// 7.3.2.2-3\nvar O=this.ToObject(V);// 7.3.2.4\nreturn O[P];},/**\n\t * 7.3.9 - http://www.ecma-international.org/ecma-262/6.0/#sec-getmethod\n\t * 1. Assert: IsPropertyKey(P) is true.\n\t * 2. Let func be GetV(O, P).\n\t * 3. ReturnIfAbrupt(func).\n\t * 4. If func is either undefined or null, return undefined.\n\t * 5. If IsCallable(func) is false, throw a TypeError exception.\n\t * 6. Return func.\n\t */GetMethod:function GetMethod(O,P){// 7.3.9.1\nif(!this.IsPropertyKey(P)){throw new TypeError('Assertion failed: IsPropertyKey(P) is not true');}// 7.3.9.2\nvar func=this.GetV(O,P);// 7.3.9.4\nif(func==null){return undefined;}// 7.3.9.5\nif(!this.IsCallable(func)){throw new TypeError(P+'is not a function');}// 7.3.9.6\nreturn func;},/**\n\t * 7.3.1 Get (O, P) - http://www.ecma-international.org/ecma-262/6.0/#sec-get-o-p\n\t * 1. Assert: Type(O) is Object.\n\t * 2. Assert: IsPropertyKey(P) is true.\n\t * 3. Return O.[[Get]](P, O).\n\t */Get:function Get(O,P){// 7.3.1.1\nif(this.Type(O)!=='Object'){throw new TypeError('Assertion failed: Type(O) is not Object');}// 7.3.1.2\nif(!this.IsPropertyKey(P)){throw new TypeError('Assertion failed: IsPropertyKey(P) is not true');}// 7.3.1.3\nreturn O[P];},Type:function Type(x){if((typeof x===\"undefined\"?\"undefined\":(0,_typeof6.default)(x))==='symbol'){return'Symbol';}return ES5.Type(x);},// http://www.ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\nSpeciesConstructor:function SpeciesConstructor(O,defaultConstructor){if(this.Type(O)!=='Object'){throw new TypeError('Assertion failed: Type(O) is not Object');}var C=O.constructor;if(typeof C==='undefined'){return defaultConstructor;}if(this.Type(C)!=='Object'){throw new TypeError('O.constructor is not an Object');}var S=hasSymbols&&_species2.default?C[_species2.default]:undefined;if(S==null){return defaultConstructor;}if(this.IsConstructor(S)){return S;}throw new TypeError('no constructor found');}});delete ES6.CheckObjectCoercible;// renamed in ES6 to RequireObjectCoercible\nmodule.exports=ES6;},{\"./es5\":187,\"./helpers/assign\":189,\"./helpers/isFinite\":190,\"./helpers/isNaN\":191,\"./helpers/isPrimitive\":192,\"./helpers/mod\":193,\"./helpers/sign\":194,\"es-to-primitive/es6\":196,\"function-bind\":370,\"is-regex\":384}],189:[function(require,module,exports){var has=Object.prototype.hasOwnProperty;module.exports=_assign4.default||function assign(target,source){for(var key in source){if(has.call(source,key)){target[key]=source[key];}}return target;};},{}],190:[function(require,module,exports){var $isNaN=_isNan2.default||function(a){return a!==a;};module.exports=_isFinite2.default||function(x){return typeof x==='number'&&!$isNaN(x)&&x!==Infinity&&x!==-Infinity;};},{}],191:[function(require,module,exports){module.exports=_isNan2.default||function isNaN(a){return a!==a;};},{}],192:[function(require,module,exports){module.exports=function isPrimitive(value){return value===null||typeof value!=='function'&&(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))!=='object';};},{}],193:[function(require,module,exports){module.exports=function mod(number,modulo){var remain=number%modulo;return Math.floor(remain>=0?remain:remain+modulo);};},{}],194:[function(require,module,exports){module.exports=function sign(number){return number>=0?1:-1;};},{}],195:[function(require,module,exports){'use strict';var toStr=Object.prototype.toString;var isPrimitive=require(\"./helpers/isPrimitive\");var isCallable=require(\"is-callable\");// https://es5.github.io/#x8.12\nvar ES5internalSlots={'[[DefaultValue]]':function DefaultValue(O,hint){var actualHint=hint||(toStr.call(O)==='[object Date]'?String:Number);if(actualHint===String||actualHint===Number){var methods=actualHint===String?['toString','valueOf']:['valueOf','toString'];var value,i;for(i=0;i<methods.length;++i){if(isCallable(O[methods[i]])){value=O[methods[i]]();if(isPrimitive(value)){return value;}}}throw new TypeError('No default value');}throw new TypeError('invalid [[DefaultValue]] hint supplied');}};// https://es5.github.io/#x9\nmodule.exports=function ToPrimitive(input,PreferredType){if(isPrimitive(input)){return input;}return ES5internalSlots['[[DefaultValue]]'](input,PreferredType);};},{\"./helpers/isPrimitive\":197,\"is-callable\":379}],196:[function(require,module,exports){'use strict';var hasSymbols=typeof _symbol4.default==='function'&&(0,_typeof6.default)(_iterator22.default)==='symbol';var isPrimitive=require(\"./helpers/isPrimitive\");var isCallable=require(\"is-callable\");var isDate=require(\"is-date-object\");var isSymbol=require(\"is-symbol\");var ordinaryToPrimitive=function OrdinaryToPrimitive(O,hint){if(typeof O==='undefined'||O===null){throw new TypeError('Cannot call method on '+O);}if(typeof hint!=='string'||hint!=='number'&&hint!=='string'){throw new TypeError('hint must be \"string\" or \"number\"');}var methodNames=hint==='string'?['toString','valueOf']:['valueOf','toString'];var method,result,i;for(i=0;i<methodNames.length;++i){method=O[methodNames[i]];if(isCallable(method)){result=method.call(O);if(isPrimitive(result)){return result;}}}throw new TypeError('No default value');};var GetMethod=function GetMethod(O,P){var func=O[P];if(func!==null&&typeof func!=='undefined'){if(!isCallable(func)){throw new TypeError(func+' returned for property '+P+' of object '+O+' is not a function');}return func;}};// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports=function ToPrimitive(input,PreferredType){if(isPrimitive(input)){return input;}var hint='default';if(arguments.length>1){if(PreferredType===String){hint='string';}else if(PreferredType===Number){hint='number';}}var exoticToPrim;if(hasSymbols){if(_toPrimitive2.default){exoticToPrim=GetMethod(input,_toPrimitive2.default);}else if(isSymbol(input)){exoticToPrim=_symbol4.default.prototype.valueOf;}}if(typeof exoticToPrim!=='undefined'){var result=exoticToPrim.call(input,hint);if(isPrimitive(result)){return result;}throw new TypeError('unable to convert exotic object to primitive');}if(hint==='default'&&(isDate(input)||isSymbol(input))){hint='string';}return ordinaryToPrimitive(input,hint==='default'?'number':hint);};},{\"./helpers/isPrimitive\":197,\"is-callable\":379,\"is-date-object\":380,\"is-symbol\":385}],197:[function(require,module,exports){arguments[4][192][0].apply(exports,arguments);},{\"dup\":192}],198:[function(require,module,exports){// Inspired by Google Closure:\n// http://closure-library.googlecode.com/svn/docs/\n// closure_goog_array_array.js.html#goog.array.clear\n'use strict';var value=require(\"../../object/valid-value\");module.exports=function(){value(this).length=0;return this;};},{\"../../object/valid-value\":226}],199:[function(require,module,exports){'use strict';var toPosInt=require(\"../../number/to-pos-integer\"),value=require(\"../../object/valid-value\"),indexOf=Array.prototype.indexOf,hasOwnProperty=Object.prototype.hasOwnProperty,abs=Math.abs,floor=Math.floor;module.exports=function(searchElement/*, fromIndex*/){var i,l,fromIndex,val;if(searchElement===searchElement){//jslint: ignore\nreturn indexOf.apply(this,arguments);}l=toPosInt(value(this).length);fromIndex=arguments[1];if(isNaN(fromIndex))fromIndex=0;else if(fromIndex>=0)fromIndex=floor(fromIndex);else fromIndex=toPosInt(this.length)-floor(abs(fromIndex));for(i=fromIndex;i<l;++i){if(hasOwnProperty.call(this,i)){val=this[i];if(val!==val)return i;//jslint: ignore\n}}return-1;};},{\"../../number/to-pos-integer\":205,\"../../object/valid-value\":226}],200:[function(require,module,exports){'use strict';var toString=Object.prototype.toString,id=toString.call(function(){return arguments;}());module.exports=function(x){return toString.call(x)===id;};},{}],201:[function(require,module,exports){'use strict';module.exports=require(\"./is-implemented\")()?_sign2.default:require(\"./shim\");},{\"./is-implemented\":202,\"./shim\":203}],202:[function(require,module,exports){'use strict';module.exports=function(){var sign=_sign2.default;if(typeof sign!=='function')return false;return sign(10)===1&&sign(-20)===-1;};},{}],203:[function(require,module,exports){'use strict';module.exports=function(value){value=Number(value);if(isNaN(value)||value===0)return value;return value>0?1:-1;};},{}],204:[function(require,module,exports){'use strict';var sign=require(\"../math/sign\"),abs=Math.abs,floor=Math.floor;module.exports=function(value){if(isNaN(value))return 0;value=Number(value);if(value===0||!isFinite(value))return value;return sign(value)*floor(abs(value));};},{\"../math/sign\":201}],205:[function(require,module,exports){'use strict';var toInteger=require(\"./to-integer\"),max=Math.max;module.exports=function(value){return max(0,toInteger(value));};},{\"./to-integer\":204}],206:[function(require,module,exports){// Internal method, used by iteration functions.\n// Calls a function for each key-value pair found in object\n// Optionally takes compareFn to iterate object in specific order\n'use strict';var callable=require(\"./valid-callable\"),value=require(\"./valid-value\"),bind=Function.prototype.bind,call=Function.prototype.call,keys=_keys4.default,propertyIsEnumerable=Object.prototype.propertyIsEnumerable;module.exports=function(method,defVal){return function(obj,cb/*, thisArg, compareFn*/){var list,thisArg=arguments[2],compareFn=arguments[3];obj=Object(value(obj));callable(cb);list=keys(obj);if(compareFn){list.sort(typeof compareFn==='function'?bind.call(compareFn,obj):undefined);}if(typeof method!=='function')method=list[method];return call.call(method,list,function(key,index){if(!propertyIsEnumerable.call(obj,key))return defVal;return call.call(cb,thisArg,obj[key],key,obj,index);});};};},{\"./valid-callable\":224,\"./valid-value\":226}],207:[function(require,module,exports){'use strict';module.exports=require(\"./is-implemented\")()?_assign4.default:require(\"./shim\");},{\"./is-implemented\":208,\"./shim\":209}],208:[function(require,module,exports){'use strict';module.exports=function(){var assign=_assign4.default,obj;if(typeof assign!=='function')return false;obj={foo:'raz'};assign(obj,{bar:'dwa'},{trzy:'trzy'});return obj.foo+obj.bar+obj.trzy==='razdwatrzy';};},{}],209:[function(require,module,exports){'use strict';var keys=require(\"../keys\"),value=require(\"../valid-value\"),max=Math.max;module.exports=function(dest,src/*, …srcn*/){var error,i,l=max(arguments.length,2),assign;dest=Object(value(dest));assign=function assign(key){try{dest[key]=src[key];}catch(e){if(!error)error=e;}};for(i=1;i<l;++i){src=arguments[i];keys(src).forEach(assign);}if(error!==undefined)throw error;return dest;};},{\"../keys\":215,\"../valid-value\":226}],210:[function(require,module,exports){'use strict';var assign=require(\"./assign\"),value=require(\"./valid-value\");module.exports=function(obj){var copy=Object(value(obj));if(copy!==obj)return copy;return assign({},obj);};},{\"./assign\":207,\"./valid-value\":226}],211:[function(require,module,exports){// Workaround for http://code.google.com/p/v8/issues/detail?id=2804\n'use strict';var create=_create4.default,shim;if(!require(\"./set-prototype-of/is-implemented\")()){shim=require(\"./set-prototype-of/shim\");}module.exports=function(){var nullObject,props,desc;if(!shim)return create;if(shim.level!==1)return create;nullObject={};props={};desc={configurable:false,enumerable:false,writable:true,value:undefined};(0,_getOwnPropertyNames2.default)(Object.prototype).forEach(function(name){if(name==='__proto__'){props[name]={configurable:true,enumerable:false,writable:true,value:undefined};return;}props[name]=desc;});(0,_defineProperties2.default)(nullObject,props);Object.defineProperty(shim,'nullPolyfill',{configurable:false,enumerable:false,writable:false,value:nullObject});return function(prototype,props){return create(prototype===null?nullObject:prototype,props);};}();},{\"./set-prototype-of/is-implemented\":222,\"./set-prototype-of/shim\":223}],212:[function(require,module,exports){'use strict';module.exports=require(\"./_iterate\")('forEach');},{\"./_iterate\":206}],213:[function(require,module,exports){// Deprecated\n'use strict';module.exports=function(obj){return typeof obj==='function';};},{}],214:[function(require,module,exports){'use strict';var map={function:true,object:true};module.exports=function(x){return x!=null&&map[typeof x===\"undefined\"?\"undefined\":(0,_typeof6.default)(x)]||false;};},{}],215:[function(require,module,exports){'use strict';module.exports=require(\"./is-implemented\")()?_keys4.default:require(\"./shim\");},{\"./is-implemented\":216,\"./shim\":217}],216:[function(require,module,exports){'use strict';module.exports=function(){try{(0,_keys4.default)('primitive');return true;}catch(e){return false;}};},{}],217:[function(require,module,exports){'use strict';var keys=_keys4.default;module.exports=function(object){return keys(object==null?object:Object(object));};},{}],218:[function(require,module,exports){'use strict';var callable=require(\"./valid-callable\"),forEach=require(\"./for-each\"),call=Function.prototype.call;module.exports=function(obj,cb/*, thisArg*/){var o={},thisArg=arguments[2];callable(cb);forEach(obj,function(value,key,obj,index){o[key]=call.call(cb,thisArg,value,key,obj,index);});return o;};},{\"./for-each\":212,\"./valid-callable\":224}],219:[function(require,module,exports){'use strict';var forEach=Array.prototype.forEach,create=_create4.default;var process=function process(src,obj){var key;for(key in src){obj[key]=src[key];}};module.exports=function(options/*, …options*/){var result=create(null);forEach.call(arguments,function(options){if(options==null)return;process(Object(options),result);});return result;};},{}],220:[function(require,module,exports){'use strict';var forEach=Array.prototype.forEach,create=_create4.default;module.exports=function(arg/*, …args*/){var set=create(null);forEach.call(arguments,function(name){set[name]=true;});return set;};},{}],221:[function(require,module,exports){'use strict';module.exports=require(\"./is-implemented\")()?_setPrototypeOf2.default:require(\"./shim\");},{\"./is-implemented\":222,\"./shim\":223}],222:[function(require,module,exports){'use strict';var create=_create4.default,getPrototypeOf=_getPrototypeOf2.default,x={};module.exports=function()/*customCreate*/{var setPrototypeOf=_setPrototypeOf2.default,customCreate=arguments[0]||create;if(typeof setPrototypeOf!=='function')return false;return getPrototypeOf(setPrototypeOf(customCreate(null),x))===x;};},{}],223:[function(require,module,exports){// Big thanks to @WebReflection for sorting this out\n// https://gist.github.com/WebReflection/5593554\n'use strict';var isObject=require(\"../is-object\"),value=require(\"../valid-value\"),isPrototypeOf=Object.prototype.isPrototypeOf,defineProperty=_defineProperty3.default,nullDesc={configurable:true,enumerable:false,writable:true,value:undefined},validate;validate=function validate(obj,prototype){value(obj);if(prototype===null||isObject(prototype))return obj;throw new TypeError('Prototype must be null or an object');};module.exports=function(status){var fn,set;if(!status)return null;if(status.level===2){if(status.set){set=status.set;fn=function fn(obj,prototype){set.call(validate(obj,prototype),prototype);return obj;};}else{fn=function fn(obj,prototype){validate(obj,prototype).__proto__=prototype;return obj;};}}else{fn=function self(obj,prototype){var isNullBase;validate(obj,prototype);isNullBase=isPrototypeOf.call(self.nullPolyfill,obj);if(isNullBase)delete self.nullPolyfill.__proto__;if(prototype===null)prototype=self.nullPolyfill;obj.__proto__=prototype;if(isNullBase)defineProperty(self.nullPolyfill,'__proto__',nullDesc);return obj;};}return Object.defineProperty(fn,'level',{configurable:false,enumerable:false,writable:false,value:status.level});}(function(){var x=(0,_create4.default)(null),y={},set,desc=(0,_getOwnPropertyDescriptor2.default)(Object.prototype,'__proto__');if(desc){try{set=desc.set;// Opera crashes at this point\nset.call(x,y);}catch(ignore){}if((0,_getPrototypeOf2.default)(x)===y)return{set:set,level:2};}x.__proto__=y;if((0,_getPrototypeOf2.default)(x)===y)return{level:2};x={};x.__proto__=y;if((0,_getPrototypeOf2.default)(x)===y)return{level:1};return false;}());require(\"../create\");},{\"../create\":211,\"../is-object\":214,\"../valid-value\":226}],224:[function(require,module,exports){'use strict';module.exports=function(fn){if(typeof fn!=='function')throw new TypeError(fn+\" is not a function\");return fn;};},{}],225:[function(require,module,exports){'use strict';var isObject=require(\"./is-object\");module.exports=function(value){if(!isObject(value))throw new TypeError(value+\" is not an Object\");return value;};},{\"./is-object\":214}],226:[function(require,module,exports){'use strict';module.exports=function(value){if(value==null)throw new TypeError(\"Cannot use null or undefined\");return value;};},{}],227:[function(require,module,exports){'use strict';module.exports=require(\"./is-implemented\")()?String.prototype.contains:require(\"./shim\");},{\"./is-implemented\":228,\"./shim\":229}],228:[function(require,module,exports){'use strict';var str='razdwatrzy';module.exports=function(){if(typeof str.contains!=='function')return false;return str.contains('dwa')===true&&str.contains('foo')===false;};},{}],229:[function(require,module,exports){'use strict';var indexOf=String.prototype.indexOf;module.exports=function(searchString/*, position*/){return indexOf.call(this,searchString,arguments[1])>-1;};},{}],230:[function(require,module,exports){'use strict';var toString=Object.prototype.toString,id=toString.call('');module.exports=function(x){return typeof x==='string'||x&&(typeof x===\"undefined\"?\"undefined\":(0,_typeof6.default)(x))==='object'&&(x instanceof String||toString.call(x)===id)||false;};},{}],231:[function(require,module,exports){'use strict';var generated=(0,_create4.default)(null),random=Math.random;module.exports=function(){var str;do{str=random().toString(36).slice(2);}while(generated[str]);return str;};},{}],232:[function(require,module,exports){'use strict';var setPrototypeOf=require(\"es5-ext/object/set-prototype-of\"),contains=require(\"es5-ext/string/#/contains\"),d=require(\"d\"),Iterator=require(\"./\"),defineProperty=_defineProperty3.default,ArrayIterator;ArrayIterator=module.exports=function(arr,kind){if(!(this instanceof ArrayIterator))return new ArrayIterator(arr,kind);Iterator.call(this,arr);if(!kind)kind='value';else if(contains.call(kind,'key+value'))kind='key+value';else if(contains.call(kind,'key'))kind='key';else kind='value';defineProperty(this,'__kind__',d('',kind));};if(setPrototypeOf)setPrototypeOf(ArrayIterator,Iterator);ArrayIterator.prototype=(0,_create4.default)(Iterator.prototype,{constructor:d(ArrayIterator),_resolve:d(function(i){if(this.__kind__==='value')return this.__list__[i];if(this.__kind__==='key+value')return[i,this.__list__[i]];return i;}),toString:d(function(){return'[object Array Iterator]';})});},{\"./\":235,\"d\":178,\"es5-ext/object/set-prototype-of\":221,\"es5-ext/string/#/contains\":227}],233:[function(require,module,exports){'use strict';var isArguments=require(\"es5-ext/function/is-arguments\"),callable=require(\"es5-ext/object/valid-callable\"),isString=require(\"es5-ext/string/is-string\"),get=require(\"./get\"),isArray=Array.isArray,call=Function.prototype.call,some=Array.prototype.some;module.exports=function(iterable,cb/*, thisArg*/){var mode,thisArg=arguments[2],result,doBreak,broken,i,l,char,code;if(isArray(iterable)||isArguments(iterable))mode='array';else if(isString(iterable))mode='string';else iterable=get(iterable);callable(cb);doBreak=function doBreak(){broken=true;};if(mode==='array'){some.call(iterable,function(value){call.call(cb,thisArg,value,doBreak);if(broken)return true;});return;}if(mode==='string'){l=iterable.length;for(i=0;i<l;++i){char=iterable[i];if(i+1<l){code=char.charCodeAt(0);if(code>=0xD800&&code<=0xDBFF)char+=iterable[++i];}call.call(cb,thisArg,char,doBreak);if(broken)break;}return;}result=iterable.next();while(!result.done){call.call(cb,thisArg,result.value,doBreak);if(broken)return;result=iterable.next();}};},{\"./get\":234,\"es5-ext/function/is-arguments\":200,\"es5-ext/object/valid-callable\":224,\"es5-ext/string/is-string\":230}],234:[function(require,module,exports){'use strict';var isArguments=require(\"es5-ext/function/is-arguments\"),isString=require(\"es5-ext/string/is-string\"),ArrayIterator=require(\"./array\"),StringIterator=require(\"./string\"),iterable=require(\"./valid-iterable\"),iteratorSymbol=require(\"es6-symbol\").iterator;module.exports=function(obj){if(typeof iterable(obj)[iteratorSymbol]==='function')return obj[iteratorSymbol]();if(isArguments(obj))return new ArrayIterator(obj);if(isString(obj))return new StringIterator(obj);return new ArrayIterator(obj);};},{\"./array\":232,\"./string\":237,\"./valid-iterable\":238,\"es5-ext/function/is-arguments\":200,\"es5-ext/string/is-string\":230,\"es6-symbol\":245}],235:[function(require,module,exports){'use strict';var clear=require(\"es5-ext/array/#/clear\"),assign=require(\"es5-ext/object/assign\"),callable=require(\"es5-ext/object/valid-callable\"),value=require(\"es5-ext/object/valid-value\"),d=require(\"d\"),autoBind=require(\"d/auto-bind\"),_Symbol4=require(\"es6-symbol\"),defineProperty=_defineProperty3.default,defineProperties=_defineProperties2.default,_Iterator;module.exports=_Iterator=function Iterator(list,context){if(!(this instanceof _Iterator))return new _Iterator(list,context);defineProperties(this,{__list__:d('w',value(list)),__context__:d('w',context),__nextIndex__:d('w',0)});if(!context)return;callable(context.on);context.on('_add',this._onAdd);context.on('_delete',this._onDelete);context.on('_clear',this._onClear);};defineProperties(_Iterator.prototype,assign({constructor:d(_Iterator),_next:d(function(){var i;if(!this.__list__)return;if(this.__redo__){i=this.__redo__.shift();if(i!==undefined)return i;}if(this.__nextIndex__<this.__list__.length)return this.__nextIndex__++;this._unBind();}),next:d(function(){return this._createResult(this._next());}),_createResult:d(function(i){if(i===undefined)return{done:true,value:undefined};return{done:false,value:this._resolve(i)};}),_resolve:d(function(i){return this.__list__[i];}),_unBind:d(function(){this.__list__=null;delete this.__redo__;if(!this.__context__)return;this.__context__.off('_add',this._onAdd);this.__context__.off('_delete',this._onDelete);this.__context__.off('_clear',this._onClear);this.__context__=null;}),toString:d(function(){return'[object Iterator]';})},autoBind({_onAdd:d(function(index){if(index>=this.__nextIndex__)return;++this.__nextIndex__;if(!this.__redo__){defineProperty(this,'__redo__',d('c',[index]));return;}this.__redo__.forEach(function(redo,i){if(redo>=index)this.__redo__[i]=++redo;},this);this.__redo__.push(index);}),_onDelete:d(function(index){var i;if(index>=this.__nextIndex__)return;--this.__nextIndex__;if(!this.__redo__)return;i=this.__redo__.indexOf(index);if(i!==-1)this.__redo__.splice(i,1);this.__redo__.forEach(function(redo,i){if(redo>index)this.__redo__[i]=--redo;},this);}),_onClear:d(function(){if(this.__redo__)clear.call(this.__redo__);this.__nextIndex__=0;})})));defineProperty(_Iterator.prototype,_Symbol4.iterator,d(function(){return this;}));defineProperty(_Iterator.prototype,_Symbol4.toStringTag,d('','Iterator'));},{\"d\":178,\"d/auto-bind\":177,\"es5-ext/array/#/clear\":198,\"es5-ext/object/assign\":207,\"es5-ext/object/valid-callable\":224,\"es5-ext/object/valid-value\":226,\"es6-symbol\":245}],236:[function(require,module,exports){'use strict';var isArguments=require(\"es5-ext/function/is-arguments\"),isString=require(\"es5-ext/string/is-string\"),iteratorSymbol=require(\"es6-symbol\").iterator,isArray=Array.isArray;module.exports=function(value){if(value==null)return false;if(isArray(value))return true;if(isString(value))return true;if(isArguments(value))return true;return typeof value[iteratorSymbol]==='function';};},{\"es5-ext/function/is-arguments\":200,\"es5-ext/string/is-string\":230,\"es6-symbol\":245}],237:[function(require,module,exports){// Thanks @mathiasbynens\n// http://mathiasbynens.be/notes/javascript-unicode#iterating-over-symbols\n'use strict';var setPrototypeOf=require(\"es5-ext/object/set-prototype-of\"),d=require(\"d\"),Iterator=require(\"./\"),defineProperty=_defineProperty3.default,StringIterator;StringIterator=module.exports=function(str){if(!(this instanceof StringIterator))return new StringIterator(str);str=String(str);Iterator.call(this,str);defineProperty(this,'__length__',d('',str.length));};if(setPrototypeOf)setPrototypeOf(StringIterator,Iterator);StringIterator.prototype=(0,_create4.default)(Iterator.prototype,{constructor:d(StringIterator),_next:d(function(){if(!this.__list__)return;if(this.__nextIndex__<this.__length__)return this.__nextIndex__++;this._unBind();}),_resolve:d(function(i){var char=this.__list__[i],code;if(this.__nextIndex__===this.__length__)return char;code=char.charCodeAt(0);if(code>=0xD800&&code<=0xDBFF)return char+this.__list__[this.__nextIndex__++];return char;}),toString:d(function(){return'[object String Iterator]';})});},{\"./\":235,\"d\":178,\"es5-ext/object/set-prototype-of\":221}],238:[function(require,module,exports){'use strict';var isIterable=require(\"./is-iterable\");module.exports=function(value){if(!isIterable(value))throw new TypeError(value+\" is not iterable\");return value;};},{\"./is-iterable\":236}],239:[function(require,module,exports){'use strict';module.exports=require(\"./is-implemented\")()?_map4.default:require(\"./polyfill\");},{\"./is-implemented\":240,\"./polyfill\":244}],240:[function(require,module,exports){'use strict';module.exports=function(){var map,iterator,result;if(typeof _map4.default!=='function')return false;try{// WebKit doesn't support arguments and crashes\nmap=new _map4.default([['raz','one'],['dwa','two'],['trzy','three']]);}catch(e){return false;}if(String(map)!=='[object Map]')return false;if(map.size!==3)return false;if(typeof map.clear!=='function')return false;if(typeof map.delete!=='function')return false;if(typeof map.entries!=='function')return false;if(typeof map.forEach!=='function')return false;if(typeof map.get!=='function')return false;if(typeof map.has!=='function')return false;if(typeof map.keys!=='function')return false;if(typeof map.set!=='function')return false;if(typeof map.values!=='function')return false;iterator=map.entries();result=iterator.next();if(result.done!==false)return false;if(!result.value)return false;if(result.value[0]!=='raz')return false;if(result.value[1]!=='one')return false;return true;};},{}],241:[function(require,module,exports){// Exports true if environment provides native `Map` implementation,\n// whatever that is.\n'use strict';module.exports=function(){if(typeof _map4.default==='undefined')return false;return Object.prototype.toString.call(new _map4.default())==='[object Map]';}();},{}],242:[function(require,module,exports){'use strict';module.exports=require(\"es5-ext/object/primitive-set\")('key','value','key+value');},{\"es5-ext/object/primitive-set\":220}],243:[function(require,module,exports){'use strict';var setPrototypeOf=require(\"es5-ext/object/set-prototype-of\"),d=require(\"d\"),Iterator=require(\"es6-iterator\"),toStringTagSymbol=require(\"es6-symbol\").toStringTag,kinds=require(\"./iterator-kinds\"),defineProperties=_defineProperties2.default,unBind=Iterator.prototype._unBind,MapIterator;MapIterator=module.exports=function(map,kind){if(!(this instanceof MapIterator))return new MapIterator(map,kind);Iterator.call(this,map.__mapKeysData__,map);if(!kind||!kinds[kind])kind='key+value';defineProperties(this,{__kind__:d('',kind),__values__:d('w',map.__mapValuesData__)});};if(setPrototypeOf)setPrototypeOf(MapIterator,Iterator);MapIterator.prototype=(0,_create4.default)(Iterator.prototype,{constructor:d(MapIterator),_resolve:d(function(i){if(this.__kind__==='value')return this.__values__[i];if(this.__kind__==='key')return this.__list__[i];return[this.__list__[i],this.__values__[i]];}),_unBind:d(function(){this.__values__=null;unBind.call(this);}),toString:d(function(){return'[object Map Iterator]';})});(0,_defineProperty3.default)(MapIterator.prototype,toStringTagSymbol,d('c','Map Iterator'));},{\"./iterator-kinds\":242,\"d\":178,\"es5-ext/object/set-prototype-of\":221,\"es6-iterator\":235,\"es6-symbol\":245}],244:[function(require,module,exports){'use strict';var clear=require(\"es5-ext/array/#/clear\"),eIndexOf=require(\"es5-ext/array/#/e-index-of\"),setPrototypeOf=require(\"es5-ext/object/set-prototype-of\"),callable=require(\"es5-ext/object/valid-callable\"),validValue=require(\"es5-ext/object/valid-value\"),d=require(\"d\"),ee=require(\"event-emitter\"),_Symbol5=require(\"es6-symbol\"),iterator=require(\"es6-iterator/valid-iterable\"),forOf=require(\"es6-iterator/for-of\"),Iterator=require(\"./lib/iterator\"),isNative=require(\"./is-native-implemented\"),call=Function.prototype.call,defineProperties=_defineProperties2.default,getPrototypeOf=_getPrototypeOf2.default,_MapPoly;module.exports=_MapPoly=function MapPoly()/*iterable*/{var iterable=arguments[0],keys,values,self;if(!(this instanceof _MapPoly))throw new TypeError('Constructor requires \\'new\\'');if(isNative&&setPrototypeOf&&_map4.default!==_MapPoly){self=setPrototypeOf(new _map4.default(),getPrototypeOf(this));}else{self=this;}if(iterable!=null)iterator(iterable);defineProperties(self,{__mapKeysData__:d('c',keys=[]),__mapValuesData__:d('c',values=[])});if(!iterable)return self;forOf(iterable,function(value){var key=validValue(value)[0];value=value[1];if(eIndexOf.call(keys,key)!==-1)return;keys.push(key);values.push(value);},self);return self;};if(isNative){if(setPrototypeOf)setPrototypeOf(_MapPoly,_map4.default);_MapPoly.prototype=(0,_create4.default)(_map4.default.prototype,{constructor:d(_MapPoly)});}ee(defineProperties(_MapPoly.prototype,{clear:d(function(){if(!this.__mapKeysData__.length)return;clear.call(this.__mapKeysData__);clear.call(this.__mapValuesData__);this.emit('_clear');}),delete:d(function(key){var index=eIndexOf.call(this.__mapKeysData__,key);if(index===-1)return false;this.__mapKeysData__.splice(index,1);this.__mapValuesData__.splice(index,1);this.emit('_delete',index,key);return true;}),entries:d(function(){return new Iterator(this,'key+value');}),forEach:d(function(cb/*, thisArg*/){var thisArg=arguments[1],iterator,result;callable(cb);iterator=this.entries();result=iterator._next();while(result!==undefined){call.call(cb,thisArg,this.__mapValuesData__[result],this.__mapKeysData__[result],this);result=iterator._next();}}),get:d(function(key){var index=eIndexOf.call(this.__mapKeysData__,key);if(index===-1)return;return this.__mapValuesData__[index];}),has:d(function(key){return eIndexOf.call(this.__mapKeysData__,key)!==-1;}),keys:d(function(){return new Iterator(this,'key');}),set:d(function(key,value){var index=eIndexOf.call(this.__mapKeysData__,key),emit;if(index===-1){index=this.__mapKeysData__.push(key)-1;emit=true;}this.__mapValuesData__[index]=value;if(emit)this.emit('_add',index,key);return this;}),size:d.gs(function(){return this.__mapKeysData__.length;}),values:d(function(){return new Iterator(this,'value');}),toString:d(function(){return'[object Map]';})}));(0,_defineProperty3.default)(_MapPoly.prototype,_Symbol5.iterator,d(function(){return this.entries();}));(0,_defineProperty3.default)(_MapPoly.prototype,_Symbol5.toStringTag,d('c','Map'));},{\"./is-native-implemented\":241,\"./lib/iterator\":243,\"d\":178,\"es5-ext/array/#/clear\":198,\"es5-ext/array/#/e-index-of\":199,\"es5-ext/object/set-prototype-of\":221,\"es5-ext/object/valid-callable\":224,\"es5-ext/object/valid-value\":226,\"es6-iterator/for-of\":233,\"es6-iterator/valid-iterable\":238,\"es6-symbol\":245,\"event-emitter\":366}],245:[function(require,module,exports){'use strict';module.exports=require(\"./is-implemented\")()?_symbol4.default:require(\"./polyfill\");},{\"./is-implemented\":246,\"./polyfill\":248}],246:[function(require,module,exports){'use strict';var validTypes={object:true,symbol:true};module.exports=function(){var symbol;if(typeof _symbol4.default!=='function')return false;symbol=(0,_symbol4.default)('test symbol');try{String(symbol);}catch(e){return false;}// Return 'true' also for polyfills\nif(!validTypes[(0,_typeof6.default)(_iterator22.default)])return false;if(!validTypes[(0,_typeof6.default)(_toPrimitive2.default)])return false;if(!validTypes[(0,_typeof6.default)(_toStringTag2.default)])return false;return true;};},{}],247:[function(require,module,exports){'use strict';module.exports=function(x){if(!x)return false;if((typeof x===\"undefined\"?\"undefined\":(0,_typeof6.default)(x))==='symbol')return true;if(!x.constructor)return false;if(x.constructor.name!=='Symbol')return false;return x[x.constructor.toStringTag]==='Symbol';};},{}],248:[function(require,module,exports){// ES2015 Symbol polyfill for environments that do not support it (or partially support it)\n'use strict';var d=require(\"d\"),validateSymbol=require(\"./validate-symbol\"),create=_create4.default,defineProperties=_defineProperties2.default,defineProperty=_defineProperty3.default,objPrototype=Object.prototype,NativeSymbol,SymbolPolyfill,HiddenSymbol,globalSymbols=create(null),isNativeSafe;if(typeof _symbol4.default==='function'){NativeSymbol=_symbol4.default;try{String(NativeSymbol());isNativeSafe=true;}catch(ignore){}}var generateName=function(){var created=create(null);return function(desc){var postfix=0,name,ie11BugWorkaround;while(created[desc+(postfix||'')]){++postfix;}desc+=postfix||'';created[desc]=true;name='@@'+desc;defineProperty(objPrototype,name,d.gs(null,function(value){// For IE11 issue see:\n// https://connect.microsoft.com/IE/feedbackdetail/view/1928508/\n//    ie11-broken-getters-on-dom-objects\n// https://github.com/medikoo/es6-symbol/issues/12\nif(ie11BugWorkaround)return;ie11BugWorkaround=true;defineProperty(this,name,d(value));ie11BugWorkaround=false;}));return name;};}();// Internal constructor (not one exposed) for creating Symbol instances.\n// This one is used to ensure that `someSymbol instanceof Symbol` always return false\nHiddenSymbol=function _Symbol6(description){if(this instanceof HiddenSymbol)throw new TypeError('TypeError: Symbol is not a constructor');return SymbolPolyfill(description);};// Exposed `Symbol` constructor\n// (returns instances of HiddenSymbol)\nmodule.exports=SymbolPolyfill=function _Symbol7(description){var symbol;if(this instanceof _Symbol7)throw new TypeError('TypeError: Symbol is not a constructor');if(isNativeSafe)return NativeSymbol(description);symbol=create(HiddenSymbol.prototype);description=description===undefined?'':String(description);return defineProperties(symbol,{__description__:d('',description),__name__:d('',generateName(description))});};defineProperties(SymbolPolyfill,{for:d(function(key){if(globalSymbols[key])return globalSymbols[key];return globalSymbols[key]=SymbolPolyfill(String(key));}),keyFor:d(function(s){var key;validateSymbol(s);for(key in globalSymbols){if(globalSymbols[key]===s)return key;}}),// If there's native implementation of given symbol, let's fallback to it\n// to ensure proper interoperability with other native functions e.g. Array.from\nhasInstance:d('',NativeSymbol&&NativeSymbol.hasInstance||SymbolPolyfill('hasInstance')),isConcatSpreadable:d('',NativeSymbol&&NativeSymbol.isConcatSpreadable||SymbolPolyfill('isConcatSpreadable')),iterator:d('',NativeSymbol&&NativeSymbol.iterator||SymbolPolyfill('iterator')),match:d('',NativeSymbol&&NativeSymbol.match||SymbolPolyfill('match')),replace:d('',NativeSymbol&&NativeSymbol.replace||SymbolPolyfill('replace')),search:d('',NativeSymbol&&NativeSymbol.search||SymbolPolyfill('search')),species:d('',NativeSymbol&&NativeSymbol.species||SymbolPolyfill('species')),split:d('',NativeSymbol&&NativeSymbol.split||SymbolPolyfill('split')),toPrimitive:d('',NativeSymbol&&NativeSymbol.toPrimitive||SymbolPolyfill('toPrimitive')),toStringTag:d('',NativeSymbol&&NativeSymbol.toStringTag||SymbolPolyfill('toStringTag')),unscopables:d('',NativeSymbol&&NativeSymbol.unscopables||SymbolPolyfill('unscopables'))});// Internal tweaks for real symbol producer\ndefineProperties(HiddenSymbol.prototype,{constructor:d(SymbolPolyfill),toString:d('',function(){return this.__name__;})});// Proper implementation of methods exposed on Symbol.prototype\n// They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype\ndefineProperties(SymbolPolyfill.prototype,{toString:d(function(){return'Symbol ('+validateSymbol(this).__description__+')';}),valueOf:d(function(){return validateSymbol(this);})});defineProperty(SymbolPolyfill.prototype,SymbolPolyfill.toPrimitive,d('',function(){var symbol=validateSymbol(this);if((typeof symbol===\"undefined\"?\"undefined\":(0,_typeof6.default)(symbol))==='symbol')return symbol;return symbol.toString();}));defineProperty(SymbolPolyfill.prototype,SymbolPolyfill.toStringTag,d('c','Symbol'));// Proper implementaton of toPrimitive and toStringTag for returned symbol instances\ndefineProperty(HiddenSymbol.prototype,SymbolPolyfill.toStringTag,d('c',SymbolPolyfill.prototype[SymbolPolyfill.toStringTag]));// Note: It's important to define `toPrimitive` as last one, as some implementations\n// implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)\n// And that may invoke error in definition flow:\n// See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149\ndefineProperty(HiddenSymbol.prototype,SymbolPolyfill.toPrimitive,d('c',SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive]));},{\"./validate-symbol\":249,\"d\":178}],249:[function(require,module,exports){'use strict';var isSymbol=require(\"./is-symbol\");module.exports=function(value){if(!isSymbol(value))throw new TypeError(value+\" is not a symbol\");return value;};},{\"./is-symbol\":247}],250:[function(require,module,exports){'use strict';module.exports=require(\"./is-implemented\")()?_weakMap4.default:require(\"./polyfill\");},{\"./is-implemented\":251,\"./polyfill\":253}],251:[function(require,module,exports){'use strict';module.exports=function(){var weakMap,x;if(typeof _weakMap4.default!=='function')return false;try{// WebKit doesn't support arguments and crashes\nweakMap=new _weakMap4.default([[x={},'one'],[{},'two'],[{},'three']]);}catch(e){return false;}if(String(weakMap)!=='[object WeakMap]')return false;if(typeof weakMap.set!=='function')return false;if(weakMap.set({},1)!==weakMap)return false;if(typeof weakMap.delete!=='function')return false;if(typeof weakMap.has!=='function')return false;if(weakMap.get(x)!=='one')return false;return true;};},{}],252:[function(require,module,exports){// Exports true if environment provides native `WeakMap` implementation, whatever that is.\n'use strict';module.exports=function(){if(typeof _weakMap4.default!=='function')return false;return Object.prototype.toString.call(new _weakMap4.default())==='[object WeakMap]';}();},{}],253:[function(require,module,exports){'use strict';var setPrototypeOf=require(\"es5-ext/object/set-prototype-of\"),object=require(\"es5-ext/object/valid-object\"),value=require(\"es5-ext/object/valid-value\"),randomUniq=require(\"es5-ext/string/random-uniq\"),d=require(\"d\"),getIterator=require(\"es6-iterator/get\"),forOf=require(\"es6-iterator/for-of\"),toStringTagSymbol=require(\"es6-symbol\").toStringTag,isNative=require(\"./is-native-implemented\"),isArray=Array.isArray,defineProperty=_defineProperty3.default,hasOwnProperty=Object.prototype.hasOwnProperty,getPrototypeOf=_getPrototypeOf2.default,_WeakMapPoly;module.exports=_WeakMapPoly=function WeakMapPoly()/*iterable*/{var iterable=arguments[0],self;if(!(this instanceof _WeakMapPoly))throw new TypeError('Constructor requires \\'new\\'');if(isNative&&setPrototypeOf&&_weakMap4.default!==_WeakMapPoly){self=setPrototypeOf(new _weakMap4.default(),getPrototypeOf(this));}else{self=this;}if(iterable!=null){if(!isArray(iterable))iterable=getIterator(iterable);}defineProperty(self,'__weakMapData__',d('c','$weakMap$'+randomUniq()));if(!iterable)return self;forOf(iterable,function(val){value(val);self.set(val[0],val[1]);});return self;};if(isNative){if(setPrototypeOf)setPrototypeOf(_WeakMapPoly,_weakMap4.default);_WeakMapPoly.prototype=(0,_create4.default)(_weakMap4.default.prototype,{constructor:d(_WeakMapPoly)});}(0,_defineProperties2.default)(_WeakMapPoly.prototype,{delete:d(function(key){if(hasOwnProperty.call(object(key),this.__weakMapData__)){delete key[this.__weakMapData__];return true;}return false;}),get:d(function(key){if(hasOwnProperty.call(object(key),this.__weakMapData__)){return key[this.__weakMapData__];}}),has:d(function(key){return hasOwnProperty.call(object(key),this.__weakMapData__);}),set:d(function(key,value){defineProperty(object(key),this.__weakMapData__,d('c',value));return this;}),toString:d(function(){return'[object WeakMap]';})});defineProperty(_WeakMapPoly.prototype,toStringTagSymbol,d('c','WeakMap'));},{\"./is-native-implemented\":252,\"d\":178,\"es5-ext/object/set-prototype-of\":221,\"es5-ext/object/valid-object\":225,\"es5-ext/object/valid-value\":226,\"es5-ext/string/random-uniq\":231,\"es6-iterator/for-of\":233,\"es6-iterator/get\":234,\"es6-symbol\":245}],254:[function(require,module,exports){'use strict';var matchOperatorsRe=/[|\\\\{}()[\\]^$+*?.]/g;module.exports=function(str){if(typeof str!=='string'){throw new TypeError('Expected a string');}return str.replace(matchOperatorsRe,'\\\\$&');};},{}],255:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.Definition=exports.ParameterDefinition=undefined;var _variable=require(\"./variable\");var _variable2=_interopRequireDefault(_variable);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}/*\n                                                                                                                                                            Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n                                                                                                                                                            Redistribution and use in source and binary forms, with or without\n                                                                                                                                                            modification, are permitted provided that the following conditions are met:\n\n                                                                                                                                                              * Redistributions of source code must retain the above copyright\n                                                                                                                                                                notice, this list of conditions and the following disclaimer.\n                                                                                                                                                              * Redistributions in binary form must reproduce the above copyright\n                                                                                                                                                                notice, this list of conditions and the following disclaimer in the\n                                                                                                                                                                documentation and/or other materials provided with the distribution.\n\n                                                                                                                                                            THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n                                                                                                                                                            AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n                                                                                                                                                            IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n                                                                                                                                                            ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n                                                                                                                                                            DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n                                                                                                                                                            (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n                                                                                                                                                            LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n                                                                                                                                                            ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n                                                                                                                                                            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n                                                                                                                                                            THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n                                                                                                                                                          *//**\n * @class Definition\n */var Definition=function Definition(type,name,node,parent,index,kind){_classCallCheck(this,Definition);/**\n   * @member {String} Definition#type - type of the occurrence (e.g. \"Parameter\", \"Variable\", ...).\n   */this.type=type;/**\n   * @member {esprima.Identifier} Definition#name - the identifier AST node of the occurrence.\n   */this.name=name;/**\n   * @member {esprima.Node} Definition#node - the enclosing node of the identifier.\n   */this.node=node;/**\n   * @member {esprima.Node?} Definition#parent - the enclosing statement node of the identifier.\n   */this.parent=parent;/**\n   * @member {Number?} Definition#index - the index in the declaration statement.\n   */this.index=index;/**\n   * @member {String?} Definition#kind - the kind of the declaration statement.\n   */this.kind=kind;};/**\n * @class ParameterDefinition\n */exports.default=Definition;var ParameterDefinition=function(_Definition){_inherits(ParameterDefinition,_Definition);function ParameterDefinition(name,node,index,rest){_classCallCheck(this,ParameterDefinition);/**\n     * Whether the parameter definition is a part of a rest parameter.\n     * @member {boolean} ParameterDefinition#rest\n     */var _this=_possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(ParameterDefinition).call(this,_variable2.default.Parameter,name,node,null,index,null));_this.rest=rest;return _this;}return ParameterDefinition;}(Definition);exports.ParameterDefinition=ParameterDefinition;exports.Definition=Definition;/* vim: set sw=4 ts=4 et tw=80 : */},{\"./variable\":262}],256:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.ScopeManager=exports.Scope=exports.Variable=exports.Reference=exports.version=undefined;var _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};/*\n                                                                                                                                                                                                                                                    Copyright (C) 2012-2014 Yusuke Suzuki <utatane.tea@gmail.com>\n                                                                                                                                                                                                                                                    Copyright (C) 2013 Alex Seville <hi@alexanderseville.com>\n                                                                                                                                                                                                                                                    Copyright (C) 2014 Thiago de Arruda <tpadilha84@gmail.com>\n\n                                                                                                                                                                                                                                                    Redistribution and use in source and binary forms, with or without\n                                                                                                                                                                                                                                                    modification, are permitted provided that the following conditions are met:\n\n                                                                                                                                                                                                                                                      * Redistributions of source code must retain the above copyright\n                                                                                                                                                                                                                                                        notice, this list of conditions and the following disclaimer.\n                                                                                                                                                                                                                                                      * Redistributions in binary form must reproduce the above copyright\n                                                                                                                                                                                                                                                        notice, this list of conditions and the following disclaimer in the\n                                                                                                                                                                                                                                                        documentation and/or other materials provided with the distribution.\n\n                                                                                                                                                                                                                                                    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n                                                                                                                                                                                                                                                    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n                                                                                                                                                                                                                                                    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n                                                                                                                                                                                                                                                    ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n                                                                                                                                                                                                                                                    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n                                                                                                                                                                                                                                                    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n                                                                                                                                                                                                                                                    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n                                                                                                                                                                                                                                                    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n                                                                                                                                                                                                                                                    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n                                                                                                                                                                                                                                                    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n                                                                                                                                                                                                                                                  *//**\n * Escope (<a href=\"http://github.com/estools/escope\">escope</a>) is an <a\n * href=\"http://www.ecma-international.org/publications/standards/Ecma-262.htm\">ECMAScript</a>\n * scope analyzer extracted from the <a\n * href=\"http://github.com/estools/esmangle\">esmangle project</a/>.\n * <p>\n * <em>escope</em> finds lexical scopes in a source program, i.e. areas of that\n * program where different occurrences of the same identifier refer to the same\n * variable. With each scope the contained variables are collected, and each\n * identifier reference in code is linked to its corresponding variable (if\n * possible).\n * <p>\n * <em>escope</em> works on a syntax tree of the parsed source code which has\n * to adhere to the <a\n * href=\"https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\">\n * Mozilla Parser API</a>. E.g. <a href=\"http://esprima.org\">esprima</a> is a parser\n * that produces such syntax trees.\n * <p>\n * The main interface is the {@link analyze} function.\n * @module escope\n *//*jslint bitwise:true */exports.analyze=analyze;var _assert=require(\"assert\");var _assert2=_interopRequireDefault(_assert);var _scopeManager=require(\"./scope-manager\");var _scopeManager2=_interopRequireDefault(_scopeManager);var _referencer=require(\"./referencer\");var _referencer2=_interopRequireDefault(_referencer);var _reference=require(\"./reference\");var _reference2=_interopRequireDefault(_reference);var _variable=require(\"./variable\");var _variable2=_interopRequireDefault(_variable);var _scope=require(\"./scope\");var _scope2=_interopRequireDefault(_scope);var _package=require(\"../package.json\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function defaultOptions(){return{optimistic:false,directive:false,nodejsScope:false,impliedStrict:false,sourceType:'script',// one of ['script', 'module']\necmaVersion:5,childVisitorKeys:null,fallback:'iteration'};}function updateDeeply(target,override){var key,val;function isHashObject(target){return(typeof target==='undefined'?'undefined':_typeof(target))==='object'&&target instanceof Object&&!(target instanceof Array)&&!(target instanceof RegExp);}for(key in override){if(override.hasOwnProperty(key)){val=override[key];if(isHashObject(val)){if(isHashObject(target[key])){updateDeeply(target[key],val);}else{target[key]=updateDeeply({},val);}}else{target[key]=val;}}}return target;}/**\n * Main interface function. Takes an Esprima syntax tree and returns the\n * analyzed scopes.\n * @function analyze\n * @param {esprima.Tree} tree\n * @param {Object} providedOptions - Options that tailor the scope analysis\n * @param {boolean} [providedOptions.optimistic=false] - the optimistic flag\n * @param {boolean} [providedOptions.directive=false]- the directive flag\n * @param {boolean} [providedOptions.ignoreEval=false]- whether to check 'eval()' calls\n * @param {boolean} [providedOptions.nodejsScope=false]- whether the whole\n * script is executed under node.js environment. When enabled, escope adds\n * a function scope immediately following the global scope.\n * @param {boolean} [providedOptions.impliedStrict=false]- implied strict mode\n * (if ecmaVersion >= 5).\n * @param {string} [providedOptions.sourceType='script']- the source type of the script. one of 'script' and 'module'\n * @param {number} [providedOptions.ecmaVersion=5]- which ECMAScript version is considered\n * @param {Object} [providedOptions.childVisitorKeys=null] - Additional known visitor keys. See [esrecurse](https://github.com/estools/esrecurse)'s the `childVisitorKeys` option.\n * @param {string} [providedOptions.fallback='iteration'] - A kind of the fallback in order to encounter with unknown node. See [esrecurse](https://github.com/estools/esrecurse)'s the `fallback` option.\n * @return {ScopeManager}\n */function analyze(tree,providedOptions){var scopeManager,referencer,options;options=updateDeeply(defaultOptions(),providedOptions);scopeManager=new _scopeManager2.default(options);referencer=new _referencer2.default(options,scopeManager);referencer.visit(tree);(0,_assert2.default)(scopeManager.__currentScope===null,'currentScope should be null.');return scopeManager;}exports./** @name module:escope.version */version=_package.version;exports./** @name module:escope.Reference */Reference=_reference2.default;exports./** @name module:escope.Variable */Variable=_variable2.default;exports./** @name module:escope.Scope */Scope=_scope2.default;exports./** @name module:escope.ScopeManager */ScopeManager=_scopeManager2.default;/* vim: set sw=4 ts=4 et tw=80 : */},{\"../package.json\":263,\"./reference\":258,\"./referencer\":259,\"./scope\":261,\"./scope-manager\":260,\"./variable\":262,\"assert\":11}],257:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var _estraverse=require(\"estraverse\");var _esrecurse=require(\"esrecurse\");var _esrecurse2=_interopRequireDefault(_esrecurse);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}/*\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Redistribution and use in source and binary forms, with or without\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 modification, are permitted provided that the following conditions are met:\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   * Redistributions of source code must retain the above copyright\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     notice, this list of conditions and the following disclaimer.\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   * Redistributions in binary form must reproduce the above copyright\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     notice, this list of conditions and the following disclaimer in the\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     documentation and/or other materials provided with the distribution.\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               */function getLast(xs){return xs[xs.length-1]||null;}var PatternVisitor=function(_esrecurse$Visitor){_inherits(PatternVisitor,_esrecurse$Visitor);_createClass(PatternVisitor,null,[{key:'isPattern',value:function isPattern(node){var nodeType=node.type;return nodeType===_estraverse.Syntax.Identifier||nodeType===_estraverse.Syntax.ObjectPattern||nodeType===_estraverse.Syntax.ArrayPattern||nodeType===_estraverse.Syntax.SpreadElement||nodeType===_estraverse.Syntax.RestElement||nodeType===_estraverse.Syntax.AssignmentPattern;}}]);function PatternVisitor(options,rootPattern,callback){_classCallCheck(this,PatternVisitor);var _this=_possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(PatternVisitor).call(this,null,options));_this.rootPattern=rootPattern;_this.callback=callback;_this.assignments=[];_this.rightHandNodes=[];_this.restElements=[];return _this;}_createClass(PatternVisitor,[{key:'Identifier',value:function Identifier(pattern){var lastRestElement=getLast(this.restElements);this.callback(pattern,{topLevel:pattern===this.rootPattern,rest:lastRestElement!=null&&lastRestElement.argument===pattern,assignments:this.assignments});}},{key:'Property',value:function Property(property){// Computed property's key is a right hand node.\nif(property.computed){this.rightHandNodes.push(property.key);}// If it's shorthand, its key is same as its value.\n// If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern).\n// If it's not shorthand, the name of new variable is its value's.\nthis.visit(property.value);}},{key:'ArrayPattern',value:function ArrayPattern(pattern){var i,iz,element;for(i=0,iz=pattern.elements.length;i<iz;++i){element=pattern.elements[i];this.visit(element);}}},{key:'AssignmentPattern',value:function AssignmentPattern(pattern){this.assignments.push(pattern);this.visit(pattern.left);this.rightHandNodes.push(pattern.right);this.assignments.pop();}},{key:'RestElement',value:function RestElement(pattern){this.restElements.push(pattern);this.visit(pattern.argument);this.restElements.pop();}},{key:'MemberExpression',value:function MemberExpression(node){// Computed property's key is a right hand node.\nif(node.computed){this.rightHandNodes.push(node.property);}// the object is only read, write to its property.\nthis.rightHandNodes.push(node.object);}//\n// ForInStatement.left and AssignmentExpression.left are LeftHandSideExpression.\n// By spec, LeftHandSideExpression is Pattern or MemberExpression.\n//   (see also: https://github.com/estree/estree/pull/20#issuecomment-74584758)\n// But espree 2.0 and esprima 2.0 parse to ArrayExpression, ObjectExpression, etc...\n//\n},{key:'SpreadElement',value:function SpreadElement(node){this.visit(node.argument);}},{key:'ArrayExpression',value:function ArrayExpression(node){node.elements.forEach(this.visit,this);}},{key:'AssignmentExpression',value:function AssignmentExpression(node){this.assignments.push(node);this.visit(node.left);this.rightHandNodes.push(node.right);this.assignments.pop();}},{key:'CallExpression',value:function CallExpression(node){var _this2=this;// arguments are right hand nodes.\nnode.arguments.forEach(function(a){_this2.rightHandNodes.push(a);});this.visit(node.callee);}}]);return PatternVisitor;}(_esrecurse2.default.Visitor);/* vim: set sw=4 ts=4 et tw=80 : */exports.default=PatternVisitor;},{\"esrecurse\":356,\"estraverse\":360}],258:[function(require,module,exports){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/var READ=0x1;var WRITE=0x2;var RW=READ|WRITE;/**\n * A Reference represents a single occurrence of an identifier in code.\n * @class Reference\n */var Reference=function(){function Reference(ident,scope,flag,writeExpr,maybeImplicitGlobal,partial,init){_classCallCheck(this,Reference);/**\n     * Identifier syntax node.\n     * @member {esprima#Identifier} Reference#identifier\n     */this.identifier=ident;/**\n     * Reference to the enclosing Scope.\n     * @member {Scope} Reference#from\n     */this.from=scope;/**\n     * Whether the reference comes from a dynamic scope (such as 'eval',\n     * 'with', etc.), and may be trapped by dynamic scopes.\n     * @member {boolean} Reference#tainted\n     */this.tainted=false;/**\n     * The variable this reference is resolved with.\n     * @member {Variable} Reference#resolved\n     */this.resolved=null;/**\n     * The read-write mode of the reference. (Value is one of {@link\n     * Reference.READ}, {@link Reference.RW}, {@link Reference.WRITE}).\n     * @member {number} Reference#flag\n     * @private\n     */this.flag=flag;if(this.isWrite()){/**\n       * If reference is writeable, this is the tree being written to it.\n       * @member {esprima#Node} Reference#writeExpr\n       */this.writeExpr=writeExpr;/**\n       * Whether the Reference might refer to a partial value of writeExpr.\n       * @member {boolean} Reference#partial\n       */this.partial=partial;/**\n       * Whether the Reference is to write of initialization.\n       * @member {boolean} Reference#init\n       */this.init=init;}this.__maybeImplicitGlobal=maybeImplicitGlobal;}/**\n   * Whether the reference is static.\n   * @method Reference#isStatic\n   * @return {boolean}\n   */_createClass(Reference,[{key:\"isStatic\",value:function isStatic(){return!this.tainted&&this.resolved&&this.resolved.scope.isStatic();}/**\n     * Whether the reference is writeable.\n     * @method Reference#isWrite\n     * @return {boolean}\n     */},{key:\"isWrite\",value:function isWrite(){return!!(this.flag&Reference.WRITE);}/**\n     * Whether the reference is readable.\n     * @method Reference#isRead\n     * @return {boolean}\n     */},{key:\"isRead\",value:function isRead(){return!!(this.flag&Reference.READ);}/**\n     * Whether the reference is read-only.\n     * @method Reference#isReadOnly\n     * @return {boolean}\n     */},{key:\"isReadOnly\",value:function isReadOnly(){return this.flag===Reference.READ;}/**\n     * Whether the reference is write-only.\n     * @method Reference#isWriteOnly\n     * @return {boolean}\n     */},{key:\"isWriteOnly\",value:function isWriteOnly(){return this.flag===Reference.WRITE;}/**\n     * Whether the reference is read-write.\n     * @method Reference#isReadWrite\n     * @return {boolean}\n     */},{key:\"isReadWrite\",value:function isReadWrite(){return this.flag===Reference.RW;}}]);return Reference;}();/**\n * @constant Reference.READ\n * @private\n */exports.default=Reference;Reference.READ=READ;/**\n * @constant Reference.WRITE\n * @private\n */Reference.WRITE=WRITE;/**\n * @constant Reference.RW\n * @private\n */Reference.RW=RW;/* vim: set sw=4 ts=4 et tw=80 : */},{}],259:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var _estraverse=require(\"estraverse\");var _esrecurse=require(\"esrecurse\");var _esrecurse2=_interopRequireDefault(_esrecurse);var _reference=require(\"./reference\");var _reference2=_interopRequireDefault(_reference);var _variable=require(\"./variable\");var _variable2=_interopRequireDefault(_variable);var _patternVisitor=require(\"./pattern-visitor\");var _patternVisitor2=_interopRequireDefault(_patternVisitor);var _definition=require(\"./definition\");var _assert=require(\"assert\");var _assert2=_interopRequireDefault(_assert);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}/*\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Redistribution and use in source and binary forms, with or without\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 modification, are permitted provided that the following conditions are met:\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   * Redistributions of source code must retain the above copyright\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     notice, this list of conditions and the following disclaimer.\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   * Redistributions in binary form must reproduce the above copyright\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     notice, this list of conditions and the following disclaimer in the\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     documentation and/or other materials provided with the distribution.\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               */function traverseIdentifierInPattern(options,rootPattern,referencer,callback){// Call the callback at left hand identifier nodes, and Collect right hand nodes.\nvar visitor=new _patternVisitor2.default(options,rootPattern,callback);visitor.visit(rootPattern);// Process the right hand nodes recursively.\nif(referencer!=null){visitor.rightHandNodes.forEach(referencer.visit,referencer);}}// Importing ImportDeclaration.\n// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-moduledeclarationinstantiation\n// https://github.com/estree/estree/blob/master/es6.md#importdeclaration\n// FIXME: Now, we don't create module environment, because the context is\n// implementation dependent.\nvar Importer=function(_esrecurse$Visitor){_inherits(Importer,_esrecurse$Visitor);function Importer(declaration,referencer){_classCallCheck(this,Importer);var _this=_possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(Importer).call(this,null,referencer.options));_this.declaration=declaration;_this.referencer=referencer;return _this;}_createClass(Importer,[{key:'visitImport',value:function visitImport(id,specifier){var _this2=this;this.referencer.visitPattern(id,function(pattern){_this2.referencer.currentScope().__define(pattern,new _definition.Definition(_variable2.default.ImportBinding,pattern,specifier,_this2.declaration,null,null));});}},{key:'ImportNamespaceSpecifier',value:function ImportNamespaceSpecifier(node){var local=node.local||node.id;if(local){this.visitImport(local,node);}}},{key:'ImportDefaultSpecifier',value:function ImportDefaultSpecifier(node){var local=node.local||node.id;this.visitImport(local,node);}},{key:'ImportSpecifier',value:function ImportSpecifier(node){var local=node.local||node.id;if(node.name){this.visitImport(node.name,node);}else{this.visitImport(local,node);}}}]);return Importer;}(_esrecurse2.default.Visitor);// Referencing variables and creating bindings.\nvar Referencer=function(_esrecurse$Visitor2){_inherits(Referencer,_esrecurse$Visitor2);function Referencer(options,scopeManager){_classCallCheck(this,Referencer);var _this3=_possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(Referencer).call(this,null,options));_this3.options=options;_this3.scopeManager=scopeManager;_this3.parent=null;_this3.isInnerMethodDefinition=false;return _this3;}_createClass(Referencer,[{key:'currentScope',value:function currentScope(){return this.scopeManager.__currentScope;}},{key:'close',value:function close(node){while(this.currentScope()&&node===this.currentScope().block){this.scopeManager.__currentScope=this.currentScope().__close(this.scopeManager);}}},{key:'pushInnerMethodDefinition',value:function pushInnerMethodDefinition(isInnerMethodDefinition){var previous=this.isInnerMethodDefinition;this.isInnerMethodDefinition=isInnerMethodDefinition;return previous;}},{key:'popInnerMethodDefinition',value:function popInnerMethodDefinition(isInnerMethodDefinition){this.isInnerMethodDefinition=isInnerMethodDefinition;}},{key:'materializeTDZScope',value:function materializeTDZScope(node,iterationNode){// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-forin-div-ofexpressionevaluation-abstract-operation\n// TDZ scope hides the declaration's names.\nthis.scopeManager.__nestTDZScope(node,iterationNode);this.visitVariableDeclaration(this.currentScope(),_variable2.default.TDZ,iterationNode.left,0,true);}},{key:'materializeIterationScope',value:function materializeIterationScope(node){var _this4=this;// Generate iteration scope for upper ForIn/ForOf Statements.\nvar letOrConstDecl;this.scopeManager.__nestForScope(node);letOrConstDecl=node.left;this.visitVariableDeclaration(this.currentScope(),_variable2.default.Variable,letOrConstDecl,0);this.visitPattern(letOrConstDecl.declarations[0].id,function(pattern){_this4.currentScope().__referencing(pattern,_reference2.default.WRITE,node.right,null,true,true);});}},{key:'referencingDefaultValue',value:function referencingDefaultValue(pattern,assignments,maybeImplicitGlobal,init){var scope=this.currentScope();assignments.forEach(function(assignment){scope.__referencing(pattern,_reference2.default.WRITE,assignment.right,maybeImplicitGlobal,pattern!==assignment.left,init);});}},{key:'visitPattern',value:function visitPattern(node,options,callback){if(typeof options==='function'){callback=options;options={processRightHandNodes:false};}traverseIdentifierInPattern(this.options,node,options.processRightHandNodes?this:null,callback);}},{key:'visitFunction',value:function visitFunction(node){var _this5=this;var i,iz;// FunctionDeclaration name is defined in upper scope\n// NOTE: Not referring variableScope. It is intended.\n// Since\n//  in ES5, FunctionDeclaration should be in FunctionBody.\n//  in ES6, FunctionDeclaration should be block scoped.\nif(node.type===_estraverse.Syntax.FunctionDeclaration){// id is defined in upper scope\nthis.currentScope().__define(node.id,new _definition.Definition(_variable2.default.FunctionName,node.id,node,null,null,null));}// FunctionExpression with name creates its special scope;\n// FunctionExpressionNameScope.\nif(node.type===_estraverse.Syntax.FunctionExpression&&node.id){this.scopeManager.__nestFunctionExpressionNameScope(node);}// Consider this function is in the MethodDefinition.\nthis.scopeManager.__nestFunctionScope(node,this.isInnerMethodDefinition);// Process parameter declarations.\nfor(i=0,iz=node.params.length;i<iz;++i){this.visitPattern(node.params[i],{processRightHandNodes:true},function(pattern,info){_this5.currentScope().__define(pattern,new _definition.ParameterDefinition(pattern,node,i,info.rest));_this5.referencingDefaultValue(pattern,info.assignments,null,true);});}// if there's a rest argument, add that\nif(node.rest){this.visitPattern({type:'RestElement',argument:node.rest},function(pattern){_this5.currentScope().__define(pattern,new _definition.ParameterDefinition(pattern,node,node.params.length,true));});}// Skip BlockStatement to prevent creating BlockStatement scope.\nif(node.body.type===_estraverse.Syntax.BlockStatement){this.visitChildren(node.body);}else{this.visit(node.body);}this.close(node);}},{key:'visitClass',value:function visitClass(node){if(node.type===_estraverse.Syntax.ClassDeclaration){this.currentScope().__define(node.id,new _definition.Definition(_variable2.default.ClassName,node.id,node,null,null,null));}// FIXME: Maybe consider TDZ.\nthis.visit(node.superClass);this.scopeManager.__nestClassScope(node);if(node.id){this.currentScope().__define(node.id,new _definition.Definition(_variable2.default.ClassName,node.id,node));}this.visit(node.body);this.close(node);}},{key:'visitProperty',value:function visitProperty(node){var previous,isMethodDefinition;if(node.computed){this.visit(node.key);}isMethodDefinition=node.type===_estraverse.Syntax.MethodDefinition;if(isMethodDefinition){previous=this.pushInnerMethodDefinition(true);}this.visit(node.value);if(isMethodDefinition){this.popInnerMethodDefinition(previous);}}},{key:'visitForIn',value:function visitForIn(node){var _this6=this;if(node.left.type===_estraverse.Syntax.VariableDeclaration&&node.left.kind!=='var'){this.materializeTDZScope(node.right,node);this.visit(node.right);this.close(node.right);this.materializeIterationScope(node);this.visit(node.body);this.close(node);}else{if(node.left.type===_estraverse.Syntax.VariableDeclaration){this.visit(node.left);this.visitPattern(node.left.declarations[0].id,function(pattern){_this6.currentScope().__referencing(pattern,_reference2.default.WRITE,node.right,null,true,true);});}else{this.visitPattern(node.left,{processRightHandNodes:true},function(pattern,info){var maybeImplicitGlobal=null;if(!_this6.currentScope().isStrict){maybeImplicitGlobal={pattern:pattern,node:node};}_this6.referencingDefaultValue(pattern,info.assignments,maybeImplicitGlobal,false);_this6.currentScope().__referencing(pattern,_reference2.default.WRITE,node.right,maybeImplicitGlobal,true,false);});}this.visit(node.right);this.visit(node.body);}}},{key:'visitVariableDeclaration',value:function visitVariableDeclaration(variableTargetScope,type,node,index,fromTDZ){var _this7=this;// If this was called to initialize a TDZ scope, this needs to make definitions, but doesn't make references.\nvar decl,init;decl=node.declarations[index];init=decl.init;this.visitPattern(decl.id,{processRightHandNodes:!fromTDZ},function(pattern,info){variableTargetScope.__define(pattern,new _definition.Definition(type,pattern,decl,node,index,node.kind));if(!fromTDZ){_this7.referencingDefaultValue(pattern,info.assignments,null,true);}if(init){_this7.currentScope().__referencing(pattern,_reference2.default.WRITE,init,null,!info.topLevel,true);}});}},{key:'AssignmentExpression',value:function AssignmentExpression(node){var _this8=this;if(_patternVisitor2.default.isPattern(node.left)){if(node.operator==='='){this.visitPattern(node.left,{processRightHandNodes:true},function(pattern,info){var maybeImplicitGlobal=null;if(!_this8.currentScope().isStrict){maybeImplicitGlobal={pattern:pattern,node:node};}_this8.referencingDefaultValue(pattern,info.assignments,maybeImplicitGlobal,false);_this8.currentScope().__referencing(pattern,_reference2.default.WRITE,node.right,maybeImplicitGlobal,!info.topLevel,false);});}else{this.currentScope().__referencing(node.left,_reference2.default.RW,node.right);}}else{this.visit(node.left);}this.visit(node.right);}},{key:'CatchClause',value:function CatchClause(node){var _this9=this;this.scopeManager.__nestCatchScope(node);this.visitPattern(node.param,{processRightHandNodes:true},function(pattern,info){_this9.currentScope().__define(pattern,new _definition.Definition(_variable2.default.CatchClause,node.param,node,null,null,null));_this9.referencingDefaultValue(pattern,info.assignments,null,true);});this.visit(node.body);this.close(node);}},{key:'Program',value:function Program(node){this.scopeManager.__nestGlobalScope(node);if(this.scopeManager.__isNodejsScope()){// Force strictness of GlobalScope to false when using node.js scope.\nthis.currentScope().isStrict=false;this.scopeManager.__nestFunctionScope(node,false);}if(this.scopeManager.__isES6()&&this.scopeManager.isModule()){this.scopeManager.__nestModuleScope(node);}if(this.scopeManager.isStrictModeSupported()&&this.scopeManager.isImpliedStrict()){this.currentScope().isStrict=true;}this.visitChildren(node);this.close(node);}},{key:'Identifier',value:function Identifier(node){this.currentScope().__referencing(node);}},{key:'UpdateExpression',value:function UpdateExpression(node){if(_patternVisitor2.default.isPattern(node.argument)){this.currentScope().__referencing(node.argument,_reference2.default.RW,null);}else{this.visitChildren(node);}}},{key:'MemberExpression',value:function MemberExpression(node){this.visit(node.object);if(node.computed){this.visit(node.property);}}},{key:'Property',value:function Property(node){this.visitProperty(node);}},{key:'MethodDefinition',value:function MethodDefinition(node){this.visitProperty(node);}},{key:'BreakStatement',value:function BreakStatement(){}},{key:'ContinueStatement',value:function ContinueStatement(){}},{key:'LabeledStatement',value:function LabeledStatement(node){this.visit(node.body);}},{key:'ForStatement',value:function ForStatement(node){// Create ForStatement declaration.\n// NOTE: In ES6, ForStatement dynamically generates\n// per iteration environment. However, escope is\n// a static analyzer, we only generate one scope for ForStatement.\nif(node.init&&node.init.type===_estraverse.Syntax.VariableDeclaration&&node.init.kind!=='var'){this.scopeManager.__nestForScope(node);}this.visitChildren(node);this.close(node);}},{key:'ClassExpression',value:function ClassExpression(node){this.visitClass(node);}},{key:'ClassDeclaration',value:function ClassDeclaration(node){this.visitClass(node);}},{key:'CallExpression',value:function CallExpression(node){// Check this is direct call to eval\nif(!this.scopeManager.__ignoreEval()&&node.callee.type===_estraverse.Syntax.Identifier&&node.callee.name==='eval'){// NOTE: This should be `variableScope`. Since direct eval call always creates Lexical environment and\n// let / const should be enclosed into it. Only VariableDeclaration affects on the caller's environment.\nthis.currentScope().variableScope.__detectEval();}this.visitChildren(node);}},{key:'BlockStatement',value:function BlockStatement(node){if(this.scopeManager.__isES6()){this.scopeManager.__nestBlockScope(node);}this.visitChildren(node);this.close(node);}},{key:'ThisExpression',value:function ThisExpression(){this.currentScope().variableScope.__detectThis();}},{key:'WithStatement',value:function WithStatement(node){this.visit(node.object);// Then nest scope for WithStatement.\nthis.scopeManager.__nestWithScope(node);this.visit(node.body);this.close(node);}},{key:'VariableDeclaration',value:function VariableDeclaration(node){var variableTargetScope,i,iz,decl;variableTargetScope=node.kind==='var'?this.currentScope().variableScope:this.currentScope();for(i=0,iz=node.declarations.length;i<iz;++i){decl=node.declarations[i];this.visitVariableDeclaration(variableTargetScope,_variable2.default.Variable,node,i);if(decl.init){this.visit(decl.init);}}}// sec 13.11.8\n},{key:'SwitchStatement',value:function SwitchStatement(node){var i,iz;this.visit(node.discriminant);if(this.scopeManager.__isES6()){this.scopeManager.__nestSwitchScope(node);}for(i=0,iz=node.cases.length;i<iz;++i){this.visit(node.cases[i]);}this.close(node);}},{key:'FunctionDeclaration',value:function FunctionDeclaration(node){this.visitFunction(node);}},{key:'FunctionExpression',value:function FunctionExpression(node){this.visitFunction(node);}},{key:'ForOfStatement',value:function ForOfStatement(node){this.visitForIn(node);}},{key:'ForInStatement',value:function ForInStatement(node){this.visitForIn(node);}},{key:'ArrowFunctionExpression',value:function ArrowFunctionExpression(node){this.visitFunction(node);}},{key:'ImportDeclaration',value:function ImportDeclaration(node){var importer;(0,_assert2.default)(this.scopeManager.__isES6()&&this.scopeManager.isModule(),'ImportDeclaration should appear when the mode is ES6 and in the module context.');importer=new Importer(node,this);importer.visit(node);}},{key:'visitExportDeclaration',value:function visitExportDeclaration(node){if(node.source){return;}if(node.declaration){this.visit(node.declaration);return;}this.visitChildren(node);}},{key:'ExportDeclaration',value:function ExportDeclaration(node){this.visitExportDeclaration(node);}},{key:'ExportNamedDeclaration',value:function ExportNamedDeclaration(node){this.visitExportDeclaration(node);}},{key:'ExportSpecifier',value:function ExportSpecifier(node){var local=node.id||node.local;this.visit(local);}},{key:'MetaProperty',value:function MetaProperty(){// do nothing.\n}}]);return Referencer;}(_esrecurse2.default.Visitor);/* vim: set sw=4 ts=4 et tw=80 : */exports.default=Referencer;},{\"./definition\":255,\"./pattern-visitor\":257,\"./reference\":258,\"./variable\":262,\"assert\":11,\"esrecurse\":356,\"estraverse\":360}],260:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();/*\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Redistribution and use in source and binary forms, with or without\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       modification, are permitted provided that the following conditions are met:\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * Redistributions of source code must retain the above copyright\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           notice, this list of conditions and the following disclaimer.\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * Redistributions in binary form must reproduce the above copyright\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           notice, this list of conditions and the following disclaimer in the\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           documentation and/or other materials provided with the distribution.\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     */var _es6WeakMap=require(\"es6-weak-map\");var _es6WeakMap2=_interopRequireDefault(_es6WeakMap);var _scope=require(\"./scope\");var _scope2=_interopRequireDefault(_scope);var _assert=require(\"assert\");var _assert2=_interopRequireDefault(_assert);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}/**\n * @class ScopeManager\n */var ScopeManager=function(){function ScopeManager(options){_classCallCheck(this,ScopeManager);this.scopes=[];this.globalScope=null;this.__nodeToScope=new _es6WeakMap2.default();this.__currentScope=null;this.__options=options;this.__declaredVariables=new _es6WeakMap2.default();}_createClass(ScopeManager,[{key:'__useDirective',value:function __useDirective(){return this.__options.directive;}},{key:'__isOptimistic',value:function __isOptimistic(){return this.__options.optimistic;}},{key:'__ignoreEval',value:function __ignoreEval(){return this.__options.ignoreEval;}},{key:'__isNodejsScope',value:function __isNodejsScope(){return this.__options.nodejsScope;}},{key:'isModule',value:function isModule(){return this.__options.sourceType==='module';}},{key:'isImpliedStrict',value:function isImpliedStrict(){return this.__options.impliedStrict;}},{key:'isStrictModeSupported',value:function isStrictModeSupported(){return this.__options.ecmaVersion>=5;}// Returns appropriate scope for this node.\n},{key:'__get',value:function __get(node){return this.__nodeToScope.get(node);}/**\n         * Get variables that are declared by the node.\n         *\n         * \"are declared by the node\" means the node is same as `Variable.defs[].node` or `Variable.defs[].parent`.\n         * If the node declares nothing, this method returns an empty array.\n         * CAUTION: This API is experimental. See https://github.com/estools/escope/pull/69 for more details.\n         *\n         * @param {Esprima.Node} node - a node to get.\n         * @returns {Variable[]} variables that declared by the node.\n         */},{key:'getDeclaredVariables',value:function getDeclaredVariables(node){return this.__declaredVariables.get(node)||[];}/**\n         * acquire scope from node.\n         * @method ScopeManager#acquire\n         * @param {Esprima.Node} node - node for the acquired scope.\n         * @param {boolean=} inner - look up the most inner scope, default value is false.\n         * @return {Scope?}\n         */},{key:'acquire',value:function acquire(node,inner){var scopes,scope,i,iz;function predicate(scope){if(scope.type==='function'&&scope.functionExpressionScope){return false;}if(scope.type==='TDZ'){return false;}return true;}scopes=this.__get(node);if(!scopes||scopes.length===0){return null;}// Heuristic selection from all scopes.\n// If you would like to get all scopes, please use ScopeManager#acquireAll.\nif(scopes.length===1){return scopes[0];}if(inner){for(i=scopes.length-1;i>=0;--i){scope=scopes[i];if(predicate(scope)){return scope;}}}else{for(i=0,iz=scopes.length;i<iz;++i){scope=scopes[i];if(predicate(scope)){return scope;}}}return null;}/**\n         * acquire all scopes from node.\n         * @method ScopeManager#acquireAll\n         * @param {Esprima.Node} node - node for the acquired scope.\n         * @return {Scope[]?}\n         */},{key:'acquireAll',value:function acquireAll(node){return this.__get(node);}/**\n         * release the node.\n         * @method ScopeManager#release\n         * @param {Esprima.Node} node - releasing node.\n         * @param {boolean=} inner - look up the most inner scope, default value is false.\n         * @return {Scope?} upper scope for the node.\n         */},{key:'release',value:function release(node,inner){var scopes,scope;scopes=this.__get(node);if(scopes&&scopes.length){scope=scopes[0].upper;if(!scope){return null;}return this.acquire(scope.block,inner);}return null;}},{key:'attach',value:function attach(){}},{key:'detach',value:function detach(){}},{key:'__nestScope',value:function __nestScope(scope){if(scope instanceof _scope.GlobalScope){(0,_assert2.default)(this.__currentScope===null);this.globalScope=scope;}this.__currentScope=scope;return scope;}},{key:'__nestGlobalScope',value:function __nestGlobalScope(node){return this.__nestScope(new _scope.GlobalScope(this,node));}},{key:'__nestBlockScope',value:function __nestBlockScope(node,isMethodDefinition){return this.__nestScope(new _scope.BlockScope(this,this.__currentScope,node));}},{key:'__nestFunctionScope',value:function __nestFunctionScope(node,isMethodDefinition){return this.__nestScope(new _scope.FunctionScope(this,this.__currentScope,node,isMethodDefinition));}},{key:'__nestForScope',value:function __nestForScope(node){return this.__nestScope(new _scope.ForScope(this,this.__currentScope,node));}},{key:'__nestCatchScope',value:function __nestCatchScope(node){return this.__nestScope(new _scope.CatchScope(this,this.__currentScope,node));}},{key:'__nestWithScope',value:function __nestWithScope(node){return this.__nestScope(new _scope.WithScope(this,this.__currentScope,node));}},{key:'__nestClassScope',value:function __nestClassScope(node){return this.__nestScope(new _scope.ClassScope(this,this.__currentScope,node));}},{key:'__nestSwitchScope',value:function __nestSwitchScope(node){return this.__nestScope(new _scope.SwitchScope(this,this.__currentScope,node));}},{key:'__nestModuleScope',value:function __nestModuleScope(node){return this.__nestScope(new _scope.ModuleScope(this,this.__currentScope,node));}},{key:'__nestTDZScope',value:function __nestTDZScope(node){return this.__nestScope(new _scope.TDZScope(this,this.__currentScope,node));}},{key:'__nestFunctionExpressionNameScope',value:function __nestFunctionExpressionNameScope(node){return this.__nestScope(new _scope.FunctionExpressionNameScope(this,this.__currentScope,node));}},{key:'__isES6',value:function __isES6(){return this.__options.ecmaVersion>=6;}}]);return ScopeManager;}();/* vim: set sw=4 ts=4 et tw=80 : */exports.default=ScopeManager;},{\"./scope\":261,\"assert\":11,\"es6-weak-map\":250}],261:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.ClassScope=exports.ForScope=exports.FunctionScope=exports.SwitchScope=exports.BlockScope=exports.TDZScope=exports.WithScope=exports.CatchScope=exports.FunctionExpressionNameScope=exports.ModuleScope=exports.GlobalScope=undefined;var _get=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=(0,_getOwnPropertyDescriptor2.default)(object,property);if(desc===undefined){var parent=(0,_getPrototypeOf2.default)(object);if(parent===null){return undefined;}else{return get(parent,property,receiver);}}else if(\"value\"in desc){return desc.value;}else{var getter=desc.get;if(getter===undefined){return undefined;}return getter.call(receiver);}};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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();/*\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Redistribution and use in source and binary forms, with or without\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       modification, are permitted provided that the following conditions are met:\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * Redistributions of source code must retain the above copyright\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           notice, this list of conditions and the following disclaimer.\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * Redistributions in binary form must reproduce the above copyright\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           notice, this list of conditions and the following disclaimer in the\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           documentation and/or other materials provided with the distribution.\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     */var _estraverse=require(\"estraverse\");var _es6Map=require(\"es6-map\");var _es6Map2=_interopRequireDefault(_es6Map);var _reference=require(\"./reference\");var _reference2=_interopRequireDefault(_reference);var _variable=require(\"./variable\");var _variable2=_interopRequireDefault(_variable);var _definition=require(\"./definition\");var _definition2=_interopRequireDefault(_definition);var _assert=require(\"assert\");var _assert2=_interopRequireDefault(_assert);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function isStrictScope(scope,block,isMethodDefinition,useDirective){var body,i,iz,stmt,expr;// When upper scope is exists and strict, inner scope is also strict.\nif(scope.upper&&scope.upper.isStrict){return true;}// ArrowFunctionExpression's scope is always strict scope.\nif(block.type===_estraverse.Syntax.ArrowFunctionExpression){return true;}if(isMethodDefinition){return true;}if(scope.type==='class'||scope.type==='module'){return true;}if(scope.type==='block'||scope.type==='switch'){return false;}if(scope.type==='function'){if(block.type===_estraverse.Syntax.Program){body=block;}else{body=block.body;}}else if(scope.type==='global'){body=block;}else{return false;}// Search 'use strict' directive.\nif(useDirective){for(i=0,iz=body.body.length;i<iz;++i){stmt=body.body[i];if(stmt.type!==_estraverse.Syntax.DirectiveStatement){break;}if(stmt.raw==='\"use strict\"'||stmt.raw==='\\'use strict\\''){return true;}}}else{for(i=0,iz=body.body.length;i<iz;++i){stmt=body.body[i];if(stmt.type!==_estraverse.Syntax.ExpressionStatement){break;}expr=stmt.expression;if(expr.type!==_estraverse.Syntax.Literal||typeof expr.value!=='string'){break;}if(expr.raw!=null){if(expr.raw==='\"use strict\"'||expr.raw==='\\'use strict\\''){return true;}}else{if(expr.value==='use strict'){return true;}}}}return false;}function registerScope(scopeManager,scope){var scopes;scopeManager.scopes.push(scope);scopes=scopeManager.__nodeToScope.get(scope.block);if(scopes){scopes.push(scope);}else{scopeManager.__nodeToScope.set(scope.block,[scope]);}}function shouldBeStatically(def){return def.type===_variable2.default.ClassName||def.type===_variable2.default.Variable&&def.parent.kind!=='var';}/**\n * @class Scope\n */var Scope=function(){function Scope(scopeManager,type,upperScope,block,isMethodDefinition){_classCallCheck(this,Scope);/**\n         * One of 'TDZ', 'module', 'block', 'switch', 'function', 'catch', 'with', 'function', 'class', 'global'.\n         * @member {String} Scope#type\n         */this.type=type;/**\n        * The scoped {@link Variable}s of this scope, as <code>{ Variable.name\n        * : Variable }</code>.\n        * @member {Map} Scope#set\n        */this.set=new _es6Map2.default();/**\n         * The tainted variables of this scope, as <code>{ Variable.name :\n         * boolean }</code>.\n         * @member {Map} Scope#taints */this.taints=new _es6Map2.default();/**\n         * Generally, through the lexical scoping of JS you can always know\n         * which variable an identifier in the source code refers to. There are\n         * a few exceptions to this rule. With 'global' and 'with' scopes you\n         * can only decide at runtime which variable a reference refers to.\n         * Moreover, if 'eval()' is used in a scope, it might introduce new\n         * bindings in this or its parent scopes.\n         * All those scopes are considered 'dynamic'.\n         * @member {boolean} Scope#dynamic\n         */this.dynamic=this.type==='global'||this.type==='with';/**\n         * A reference to the scope-defining syntax node.\n         * @member {esprima.Node} Scope#block\n         */this.block=block;/**\n        * The {@link Reference|references} that are not resolved with this scope.\n        * @member {Reference[]} Scope#through\n        */this.through=[];/**\n        * The scoped {@link Variable}s of this scope. In the case of a\n        * 'function' scope this includes the automatic argument <em>arguments</em> as\n        * its first element, as well as all further formal arguments.\n        * @member {Variable[]} Scope#variables\n        */this.variables=[];/**\n        * Any variable {@link Reference|reference} found in this scope. This\n        * includes occurrences of local variables as well as variables from\n        * parent scopes (including the global scope). For local variables\n        * this also includes defining occurrences (like in a 'var' statement).\n        * In a 'function' scope this does not include the occurrences of the\n        * formal parameter in the parameter list.\n        * @member {Reference[]} Scope#references\n        */this.references=[];/**\n        * For 'global' and 'function' scopes, this is a self-reference. For\n        * other scope types this is the <em>variableScope</em> value of the\n        * parent scope.\n        * @member {Scope} Scope#variableScope\n        */this.variableScope=this.type==='global'||this.type==='function'||this.type==='module'?this:upperScope.variableScope;/**\n        * Whether this scope is created by a FunctionExpression.\n        * @member {boolean} Scope#functionExpressionScope\n        */this.functionExpressionScope=false;/**\n        * Whether this is a scope that contains an 'eval()' invocation.\n        * @member {boolean} Scope#directCallToEvalScope\n        */this.directCallToEvalScope=false;/**\n        * @member {boolean} Scope#thisFound\n        */this.thisFound=false;this.__left=[];/**\n        * Reference to the parent {@link Scope|scope}.\n        * @member {Scope} Scope#upper\n        */this.upper=upperScope;/**\n        * Whether 'use strict' is in effect in this scope.\n        * @member {boolean} Scope#isStrict\n        */this.isStrict=isStrictScope(this,block,isMethodDefinition,scopeManager.__useDirective());/**\n        * List of nested {@link Scope}s.\n        * @member {Scope[]} Scope#childScopes\n        */this.childScopes=[];if(this.upper){this.upper.childScopes.push(this);}this.__declaredVariables=scopeManager.__declaredVariables;registerScope(scopeManager,this);}_createClass(Scope,[{key:'__shouldStaticallyClose',value:function __shouldStaticallyClose(scopeManager){return!this.dynamic||scopeManager.__isOptimistic();}},{key:'__shouldStaticallyCloseForGlobal',value:function __shouldStaticallyCloseForGlobal(ref){// On global scope, let/const/class declarations should be resolved statically.\nvar name=ref.identifier.name;if(!this.set.has(name)){return false;}var variable=this.set.get(name);var defs=variable.defs;return defs.length>0&&defs.every(shouldBeStatically);}},{key:'__staticCloseRef',value:function __staticCloseRef(ref){if(!this.__resolve(ref)){this.__delegateToUpperScope(ref);}}},{key:'__dynamicCloseRef',value:function __dynamicCloseRef(ref){// notify all names are through to global\nvar current=this;do{current.through.push(ref);current=current.upper;}while(current);}},{key:'__globalCloseRef',value:function __globalCloseRef(ref){// let/const/class declarations should be resolved statically.\n// others should be resolved dynamically.\nif(this.__shouldStaticallyCloseForGlobal(ref)){this.__staticCloseRef(ref);}else{this.__dynamicCloseRef(ref);}}},{key:'__close',value:function __close(scopeManager){var closeRef;if(this.__shouldStaticallyClose(scopeManager)){closeRef=this.__staticCloseRef;}else if(this.type!=='global'){closeRef=this.__dynamicCloseRef;}else{closeRef=this.__globalCloseRef;}// Try Resolving all references in this scope.\nfor(var i=0,iz=this.__left.length;i<iz;++i){var ref=this.__left[i];closeRef.call(this,ref);}this.__left=null;return this.upper;}},{key:'__resolve',value:function __resolve(ref){var variable,name;name=ref.identifier.name;if(this.set.has(name)){variable=this.set.get(name);variable.references.push(ref);variable.stack=variable.stack&&ref.from.variableScope===this.variableScope;if(ref.tainted){variable.tainted=true;this.taints.set(variable.name,true);}ref.resolved=variable;return true;}return false;}},{key:'__delegateToUpperScope',value:function __delegateToUpperScope(ref){if(this.upper){this.upper.__left.push(ref);}this.through.push(ref);}},{key:'__addDeclaredVariablesOfNode',value:function __addDeclaredVariablesOfNode(variable,node){if(node==null){return;}var variables=this.__declaredVariables.get(node);if(variables==null){variables=[];this.__declaredVariables.set(node,variables);}if(variables.indexOf(variable)===-1){variables.push(variable);}}},{key:'__defineGeneric',value:function __defineGeneric(name,set,variables,node,def){var variable;variable=set.get(name);if(!variable){variable=new _variable2.default(name,this);set.set(name,variable);variables.push(variable);}if(def){variable.defs.push(def);if(def.type!==_variable2.default.TDZ){this.__addDeclaredVariablesOfNode(variable,def.node);this.__addDeclaredVariablesOfNode(variable,def.parent);}}if(node){variable.identifiers.push(node);}}},{key:'__define',value:function __define(node,def){if(node&&node.type===_estraverse.Syntax.Identifier){this.__defineGeneric(node.name,this.set,this.variables,node,def);}}},{key:'__referencing',value:function __referencing(node,assign,writeExpr,maybeImplicitGlobal,partial,init){// because Array element may be null\nif(!node||node.type!==_estraverse.Syntax.Identifier){return;}// Specially handle like `this`.\nif(node.name==='super'){return;}var ref=new _reference2.default(node,this,assign||_reference2.default.READ,writeExpr,maybeImplicitGlobal,!!partial,!!init);this.references.push(ref);this.__left.push(ref);}},{key:'__detectEval',value:function __detectEval(){var current;current=this;this.directCallToEvalScope=true;do{current.dynamic=true;current=current.upper;}while(current);}},{key:'__detectThis',value:function __detectThis(){this.thisFound=true;}},{key:'__isClosed',value:function __isClosed(){return this.__left===null;}/**\n         * returns resolved {Reference}\n         * @method Scope#resolve\n         * @param {Esprima.Identifier} ident - identifier to be resolved.\n         * @return {Reference}\n         */},{key:'resolve',value:function resolve(ident){var ref,i,iz;(0,_assert2.default)(this.__isClosed(),'Scope should be closed.');(0,_assert2.default)(ident.type===_estraverse.Syntax.Identifier,'Target should be identifier.');for(i=0,iz=this.references.length;i<iz;++i){ref=this.references[i];if(ref.identifier===ident){return ref;}}return null;}/**\n         * returns this scope is static\n         * @method Scope#isStatic\n         * @return {boolean}\n         */},{key:'isStatic',value:function isStatic(){return!this.dynamic;}/**\n         * returns this scope has materialized arguments\n         * @method Scope#isArgumentsMaterialized\n         * @return {boolean}\n         */},{key:'isArgumentsMaterialized',value:function isArgumentsMaterialized(){return true;}/**\n         * returns this scope has materialized `this` reference\n         * @method Scope#isThisMaterialized\n         * @return {boolean}\n         */},{key:'isThisMaterialized',value:function isThisMaterialized(){return true;}},{key:'isUsedName',value:function isUsedName(name){if(this.set.has(name)){return true;}for(var i=0,iz=this.through.length;i<iz;++i){if(this.through[i].identifier.name===name){return true;}}return false;}}]);return Scope;}();exports.default=Scope;var GlobalScope=exports.GlobalScope=function(_Scope){_inherits(GlobalScope,_Scope);function GlobalScope(scopeManager,block){_classCallCheck(this,GlobalScope);var _this=_possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(GlobalScope).call(this,scopeManager,'global',null,block,false));_this.implicit={set:new _es6Map2.default(),variables:[],/**\n            * List of {@link Reference}s that are left to be resolved (i.e. which\n            * need to be linked to the variable they refer to).\n            * @member {Reference[]} Scope#implicit#left\n            */left:[]};return _this;}_createClass(GlobalScope,[{key:'__close',value:function __close(scopeManager){var implicit=[];for(var i=0,iz=this.__left.length;i<iz;++i){var ref=this.__left[i];if(ref.__maybeImplicitGlobal&&!this.set.has(ref.identifier.name)){implicit.push(ref.__maybeImplicitGlobal);}}// create an implicit global variable from assignment expression\nfor(var _i=0,_iz=implicit.length;_i<_iz;++_i){var info=implicit[_i];this.__defineImplicit(info.pattern,new _definition2.default(_variable2.default.ImplicitGlobalVariable,info.pattern,info.node,null,null,null));}this.implicit.left=this.__left;return _get((0,_getPrototypeOf2.default)(GlobalScope.prototype),'__close',this).call(this,scopeManager);}},{key:'__defineImplicit',value:function __defineImplicit(node,def){if(node&&node.type===_estraverse.Syntax.Identifier){this.__defineGeneric(node.name,this.implicit.set,this.implicit.variables,node,def);}}}]);return GlobalScope;}(Scope);var ModuleScope=exports.ModuleScope=function(_Scope2){_inherits(ModuleScope,_Scope2);function ModuleScope(scopeManager,upperScope,block){_classCallCheck(this,ModuleScope);return _possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(ModuleScope).call(this,scopeManager,'module',upperScope,block,false));}return ModuleScope;}(Scope);var FunctionExpressionNameScope=exports.FunctionExpressionNameScope=function(_Scope3){_inherits(FunctionExpressionNameScope,_Scope3);function FunctionExpressionNameScope(scopeManager,upperScope,block){_classCallCheck(this,FunctionExpressionNameScope);var _this3=_possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(FunctionExpressionNameScope).call(this,scopeManager,'function-expression-name',upperScope,block,false));_this3.__define(block.id,new _definition2.default(_variable2.default.FunctionName,block.id,block,null,null,null));_this3.functionExpressionScope=true;return _this3;}return FunctionExpressionNameScope;}(Scope);var CatchScope=exports.CatchScope=function(_Scope4){_inherits(CatchScope,_Scope4);function CatchScope(scopeManager,upperScope,block){_classCallCheck(this,CatchScope);return _possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(CatchScope).call(this,scopeManager,'catch',upperScope,block,false));}return CatchScope;}(Scope);var WithScope=exports.WithScope=function(_Scope5){_inherits(WithScope,_Scope5);function WithScope(scopeManager,upperScope,block){_classCallCheck(this,WithScope);return _possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(WithScope).call(this,scopeManager,'with',upperScope,block,false));}_createClass(WithScope,[{key:'__close',value:function __close(scopeManager){if(this.__shouldStaticallyClose(scopeManager)){return _get((0,_getPrototypeOf2.default)(WithScope.prototype),'__close',this).call(this,scopeManager);}for(var i=0,iz=this.__left.length;i<iz;++i){var ref=this.__left[i];ref.tainted=true;this.__delegateToUpperScope(ref);}this.__left=null;return this.upper;}}]);return WithScope;}(Scope);var TDZScope=exports.TDZScope=function(_Scope6){_inherits(TDZScope,_Scope6);function TDZScope(scopeManager,upperScope,block){_classCallCheck(this,TDZScope);return _possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(TDZScope).call(this,scopeManager,'TDZ',upperScope,block,false));}return TDZScope;}(Scope);var BlockScope=exports.BlockScope=function(_Scope7){_inherits(BlockScope,_Scope7);function BlockScope(scopeManager,upperScope,block){_classCallCheck(this,BlockScope);return _possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(BlockScope).call(this,scopeManager,'block',upperScope,block,false));}return BlockScope;}(Scope);var SwitchScope=exports.SwitchScope=function(_Scope8){_inherits(SwitchScope,_Scope8);function SwitchScope(scopeManager,upperScope,block){_classCallCheck(this,SwitchScope);return _possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(SwitchScope).call(this,scopeManager,'switch',upperScope,block,false));}return SwitchScope;}(Scope);var FunctionScope=exports.FunctionScope=function(_Scope9){_inherits(FunctionScope,_Scope9);function FunctionScope(scopeManager,upperScope,block,isMethodDefinition){_classCallCheck(this,FunctionScope);// section 9.2.13, FunctionDeclarationInstantiation.\n// NOTE Arrow functions never have an arguments objects.\nvar _this9=_possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(FunctionScope).call(this,scopeManager,'function',upperScope,block,isMethodDefinition));if(_this9.block.type!==_estraverse.Syntax.ArrowFunctionExpression){_this9.__defineArguments();}return _this9;}_createClass(FunctionScope,[{key:'isArgumentsMaterialized',value:function isArgumentsMaterialized(){// TODO(Constellation)\n// We can more aggressive on this condition like this.\n//\n// function t() {\n//     // arguments of t is always hidden.\n//     function arguments() {\n//     }\n// }\nif(this.block.type===_estraverse.Syntax.ArrowFunctionExpression){return false;}if(!this.isStatic()){return true;}var variable=this.set.get('arguments');(0,_assert2.default)(variable,'Always have arguments variable.');return variable.tainted||variable.references.length!==0;}},{key:'isThisMaterialized',value:function isThisMaterialized(){if(!this.isStatic()){return true;}return this.thisFound;}},{key:'__defineArguments',value:function __defineArguments(){this.__defineGeneric('arguments',this.set,this.variables,null,null);this.taints.set('arguments',true);}}]);return FunctionScope;}(Scope);var ForScope=exports.ForScope=function(_Scope10){_inherits(ForScope,_Scope10);function ForScope(scopeManager,upperScope,block){_classCallCheck(this,ForScope);return _possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(ForScope).call(this,scopeManager,'for',upperScope,block,false));}return ForScope;}(Scope);var ClassScope=exports.ClassScope=function(_Scope11){_inherits(ClassScope,_Scope11);function ClassScope(scopeManager,upperScope,block){_classCallCheck(this,ClassScope);return _possibleConstructorReturn(this,(0,_getPrototypeOf2.default)(ClassScope).call(this,scopeManager,'class',upperScope,block,false));}return ClassScope;}(Scope);/* vim: set sw=4 ts=4 et tw=80 : */},{\"./definition\":255,\"./reference\":258,\"./variable\":262,\"assert\":11,\"es6-map\":239,\"estraverse\":360}],262:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*//**\n * A Variable represents a locally scoped identifier. These include arguments to\n * functions.\n * @class Variable\n */var Variable=function Variable(name,scope){_classCallCheck(this,Variable);/**\n   * The variable name, as given in the source code.\n   * @member {String} Variable#name\n   */this.name=name;/**\n   * List of defining occurrences of this variable (like in 'var ...'\n   * statements or as parameter), as AST nodes.\n   * @member {esprima.Identifier[]} Variable#identifiers\n   */this.identifiers=[];/**\n   * List of {@link Reference|references} of this variable (excluding parameter entries)\n   * in its defining scope and all nested scopes. For defining\n   * occurrences only see {@link Variable#defs}.\n   * @member {Reference[]} Variable#references\n   */this.references=[];/**\n   * List of defining occurrences of this variable (like in 'var ...'\n   * statements or as parameter), as custom objects.\n   * @member {Definition[]} Variable#defs\n   */this.defs=[];this.tainted=false;/**\n   * Whether this is a stack variable.\n   * @member {boolean} Variable#stack\n   */this.stack=true;/**\n   * Reference to the enclosing Scope.\n   * @member {Scope} Variable#scope\n   */this.scope=scope;};exports.default=Variable;Variable.CatchClause='CatchClause';Variable.Parameter='Parameter';Variable.FunctionName='FunctionName';Variable.ClassName='ClassName';Variable.Variable='Variable';Variable.ImportBinding='ImportBinding';Variable.TDZ='TDZ';Variable.ImplicitGlobalVariable='ImplicitGlobalVariable';/* vim: set sw=4 ts=4 et tw=80 : */},{}],263:[function(require,module,exports){module.exports={\"name\":\"escope\",\"description\":\"ECMAScript scope analyzer\",\"homepage\":\"http://github.com/estools/escope\",\"main\":\"lib/index.js\",\"version\":\"3.6.0\",\"engines\":{\"node\":\">=0.4.0\"},\"maintainers\":[{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"web\":\"http://github.com/Constellation\"}],\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/estools/escope.git\"},\"dependencies\":{\"es6-map\":\"^0.1.3\",\"es6-weak-map\":\"^2.0.1\",\"esrecurse\":\"^4.1.0\",\"estraverse\":\"^4.1.1\"},\"devDependencies\":{\"babel\":\"^6.3.26\",\"babel-preset-es2015\":\"^6.3.13\",\"babel-register\":\"^6.3.13\",\"browserify\":\"^13.0.0\",\"chai\":\"^3.4.1\",\"espree\":\"^3.1.1\",\"esprima\":\"^2.7.1\",\"gulp\":\"^3.9.0\",\"gulp-babel\":\"^6.1.1\",\"gulp-bump\":\"^1.0.0\",\"gulp-eslint\":\"^1.1.1\",\"gulp-espower\":\"^1.0.2\",\"gulp-filter\":\"^3.0.1\",\"gulp-git\":\"^1.6.1\",\"gulp-mocha\":\"^2.2.0\",\"gulp-plumber\":\"^1.0.1\",\"gulp-sourcemaps\":\"^1.6.0\",\"gulp-tag-version\":\"^1.3.0\",\"jsdoc\":\"^3.4.0\",\"lazypipe\":\"^1.0.1\",\"vinyl-source-stream\":\"^1.1.0\"},\"license\":\"BSD-2-Clause\",\"scripts\":{\"test\":\"gulp travis\",\"unit-test\":\"gulp test\",\"lint\":\"gulp lint\",\"jsdoc\":\"jsdoc src/*.js README.md\"}};},{}],264:[function(require,module,exports){/**\n * @fileoverview Common utils for AST.\n * @author Gyandeep Singh\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar anyFunctionPattern=/^(?:Function(?:Declaration|Expression)|ArrowFunctionExpression)$/;var anyLoopPattern=/^(?:DoWhile|For|ForIn|ForOf|While)Statement$/;var arrayOrTypedArrayPattern=/Array$/;var arrayMethodPattern=/^(?:every|filter|find|findIndex|forEach|map|some)$/;var bindOrCallOrApplyPattern=/^(?:bind|call|apply)$/;var breakableTypePattern=/^(?:(?:Do)?While|For(?:In|Of)?|Switch)Statement$/;var thisTagPattern=/^[\\s\\*]*@this/m;/**\n * Checks reference if is non initializer and writable.\n * @param {Reference} reference - A reference to check.\n * @param {int} index - The index of the reference in the references.\n * @param {Reference[]} references - The array that the reference belongs to.\n * @returns {boolean} Success/Failure\n * @private\n */function isModifyingReference(reference,index,references){var identifier=reference.identifier;/*\n     * Destructuring assignments can have multiple default value, so\n     * possibly there are multiple writeable references for the same\n     * identifier.\n     */var modifyingDifferentIdentifier=index===0||references[index-1].identifier!==identifier;return identifier&&reference.init===false&&reference.isWrite()&&modifyingDifferentIdentifier;}/**\n * Checks whether the given string starts with uppercase or not.\n *\n * @param {string} s - The string to check.\n * @returns {boolean} `true` if the string starts with uppercase.\n */function startsWithUpperCase(s){return s[0]!==s[0].toLocaleLowerCase();}/**\n * Checks whether or not a node is a constructor.\n * @param {ASTNode} node - A function node to check.\n * @returns {boolean} Wehether or not a node is a constructor.\n */function isES5Constructor(node){return node.id&&startsWithUpperCase(node.id.name);}/**\n * Finds a function node from ancestors of a node.\n * @param {ASTNode} node - A start node to find.\n * @returns {Node|null} A found function node.\n */function getUpperFunction(node){while(node){if(anyFunctionPattern.test(node.type)){return node;}node=node.parent;}return null;}/**\n * Checks whether or not a node is `null` or `undefined`.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is a `null` or `undefined`.\n * @public\n */function isNullOrUndefined(node){return node.type===\"Literal\"&&node.value===null||node.type===\"Identifier\"&&node.name===\"undefined\"||node.type===\"UnaryExpression\"&&node.operator===\"void\";}/**\n * Checks whether or not a node is callee.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is callee.\n */function isCallee(node){return node.parent.type===\"CallExpression\"&&node.parent.callee===node;}/**\n * Checks whether or not a node is `Reclect.apply`.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is a `Reclect.apply`.\n */function isReflectApply(node){return node.type===\"MemberExpression\"&&node.object.type===\"Identifier\"&&node.object.name===\"Reflect\"&&node.property.type===\"Identifier\"&&node.property.name===\"apply\"&&node.computed===false;}/**\n * Checks whether or not a node is `Array.from`.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is a `Array.from`.\n */function isArrayFromMethod(node){return node.type===\"MemberExpression\"&&node.object.type===\"Identifier\"&&arrayOrTypedArrayPattern.test(node.object.name)&&node.property.type===\"Identifier\"&&node.property.name===\"from\"&&node.computed===false;}/**\n * Checks whether or not a node is a method which has `thisArg`.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is a method which has `thisArg`.\n */function isMethodWhichHasThisArg(node){while(node){if(node.type===\"Identifier\"){return arrayMethodPattern.test(node.name);}if(node.type===\"MemberExpression\"&&!node.computed){node=node.property;continue;}break;}return false;}/**\n * Checks whether or not a node has a `@this` tag in its comments.\n * @param {ASTNode} node - A node to check.\n * @param {SourceCode} sourceCode - A SourceCode instance to get comments.\n * @returns {boolean} Whether or not the node has a `@this` tag in its comments.\n */function hasJSDocThisTag(node,sourceCode){var jsdocComment=sourceCode.getJSDocComment(node);if(jsdocComment&&thisTagPattern.test(jsdocComment.value)){return true;}// Checks `@this` in its leading comments for callbacks,\n// because callbacks don't have its JSDoc comment.\n// e.g.\n//     sinon.test(/* @this sinon.Sandbox */function() { this.spy(); });\nreturn sourceCode.getComments(node).leading.some(function(comment){return thisTagPattern.test(comment.value);});}/**\n * Determines if a node is surrounded by parentheses.\n * @param {SourceCode} sourceCode The ESLint source code object\n * @param {ASTNode} node The node to be checked.\n * @returns {boolean} True if the node is parenthesised.\n * @private\n */function isParenthesised(sourceCode,node){var previousToken=sourceCode.getTokenBefore(node),nextToken=sourceCode.getTokenAfter(node);return Boolean(previousToken&&nextToken)&&previousToken.value===\"(\"&&previousToken.range[1]<=node.range[0]&&nextToken.value===\")\"&&nextToken.range[0]>=node.range[1];}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\nmodule.exports={/**\n     * Determines whether two adjacent tokens are on the same line.\n     * @param {Object} left - The left token object.\n     * @param {Object} right - The right token object.\n     * @returns {boolean} Whether or not the tokens are on the same line.\n     * @public\n     */isTokenOnSameLine:function isTokenOnSameLine(left,right){return left.loc.end.line===right.loc.start.line;},isNullOrUndefined:isNullOrUndefined,isCallee:isCallee,isES5Constructor:isES5Constructor,getUpperFunction:getUpperFunction,isArrayFromMethod:isArrayFromMethod,isParenthesised:isParenthesised,/**\n     * Checks whether or not a given node is a string literal.\n     * @param {ASTNode} node - A node to check.\n     * @returns {boolean} `true` if the node is a string literal.\n     */isStringLiteral:function isStringLiteral(node){return node.type===\"Literal\"&&typeof node.value===\"string\"||node.type===\"TemplateLiteral\";},/**\n     * Checks whether a given node is a breakable statement or not.\n     * The node is breakable if the node is one of the following type:\n     *\n     * - DoWhileStatement\n     * - ForInStatement\n     * - ForOfStatement\n     * - ForStatement\n     * - SwitchStatement\n     * - WhileStatement\n     *\n     * @param {ASTNode} node - A node to check.\n     * @returns {boolean} `true` if the node is breakable.\n     */isBreakableStatement:function isBreakableStatement(node){return breakableTypePattern.test(node.type);},/**\n     * Gets the label if the parent node of a given node is a LabeledStatement.\n     *\n     * @param {ASTNode} node - A node to get.\n     * @returns {string|null} The label or `null`.\n     */getLabel:function getLabel(node){if(node.parent.type===\"LabeledStatement\"){return node.parent.label.name;}return null;},/**\n     * Gets references which are non initializer and writable.\n     * @param {Reference[]} references - An array of references.\n     * @returns {Reference[]} An array of only references which are non initializer and writable.\n     * @public\n     */getModifyingReferences:function getModifyingReferences(references){return references.filter(isModifyingReference);},/**\n     * Validate that a string passed in is surrounded by the specified character\n     * @param  {string} val The text to check.\n     * @param  {string} character The character to see if it's surrounded by.\n     * @returns {boolean} True if the text is surrounded by the character, false if not.\n     * @private\n     */isSurroundedBy:function isSurroundedBy(val,character){return val[0]===character&&val[val.length-1]===character;},/**\n     * Returns whether the provided node is an ESLint directive comment or not\n     * @param {LineComment|BlockComment} node The node to be checked\n     * @returns {boolean} `true` if the node is an ESLint directive comment\n     */isDirectiveComment:function isDirectiveComment(node){var comment=node.value.trim();return node.type===\"Line\"&&comment.indexOf(\"eslint-\")===0||node.type===\"Block\"&&(comment.indexOf(\"global \")===0||comment.indexOf(\"eslint \")===0||comment.indexOf(\"eslint-\")===0);},/**\n     * Finds the variable by a given name in a given scope and its upper scopes.\n     *\n     * @param {escope.Scope} initScope - A scope to start find.\n     * @param {string} name - A variable name to find.\n     * @returns {escope.Variable|null} A found variable or `null`.\n     */getVariableByName:function getVariableByName(initScope,name){var scope=initScope;while(scope){var variable=scope.set.get(name);if(variable){return variable;}scope=scope.upper;}return null;},/**\n     * Checks whether or not a given function node is the default `this` binding.\n     *\n     * First, this checks the node:\n     *\n     * - The function name does not start with uppercase (it's a constructor).\n     * - The function does not have a JSDoc comment that has a @this tag.\n     *\n     * Next, this checks the location of the node.\n     * If the location is below, this judges `this` is valid.\n     *\n     * - The location is not on an object literal.\n     * - The location is not assigned to a variable which starts with an uppercase letter.\n     * - The location is not on an ES2015 class.\n     * - Its `bind`/`call`/`apply` method is not called directly.\n     * - The function is not a callback of array methods (such as `.forEach()`) if `thisArg` is given.\n     *\n     * @param {ASTNode} node - A function node to check.\n     * @param {SourceCode} sourceCode - A SourceCode instance to get comments.\n     * @returns {boolean} The function node is the default `this` binding.\n     */isDefaultThisBinding:function isDefaultThisBinding(node,sourceCode){if(isES5Constructor(node)||hasJSDocThisTag(node,sourceCode)){return false;}var isAnonymous=node.id===null;while(node){var parent=node.parent;switch(parent.type){/*\n                 * Looks up the destination.\n                 * e.g., obj.foo = nativeFoo || function foo() { ... };\n                 */case\"LogicalExpression\":case\"ConditionalExpression\":node=parent;break;// If the upper function is IIFE, checks the destination of the return value.\n// e.g.\n//   obj.foo = (function() {\n//     // setup...\n//     return function foo() { ... };\n//   })();\ncase\"ReturnStatement\":{var func=getUpperFunction(parent);if(func===null||!isCallee(func)){return true;}node=func.parent;break;}// e.g.\n//   var obj = { foo() { ... } };\n//   var obj = { foo: function() { ... } };\n//   class A { constructor() { ... } }\n//   class A { foo() { ... } }\n//   class A { get foo() { ... } }\n//   class A { set foo() { ... } }\n//   class A { static foo() { ... } }\ncase\"Property\":case\"MethodDefinition\":return parent.value!==node;// e.g.\n//   obj.foo = function foo() { ... };\n//   Foo = function() { ... };\n//   [obj.foo = function foo() { ... }] = a;\n//   [Foo = function() { ... }] = a;\ncase\"AssignmentExpression\":case\"AssignmentPattern\":if(parent.right===node){if(parent.left.type===\"MemberExpression\"){return false;}if(isAnonymous&&parent.left.type===\"Identifier\"&&startsWithUpperCase(parent.left.name)){return false;}}return true;// e.g.\n//   var Foo = function() { ... };\ncase\"VariableDeclarator\":return!(isAnonymous&&parent.init===node&&parent.id.type===\"Identifier\"&&startsWithUpperCase(parent.id.name));// e.g.\n//   var foo = function foo() { ... }.bind(obj);\n//   (function foo() { ... }).call(obj);\n//   (function foo() { ... }).apply(obj, []);\ncase\"MemberExpression\":return parent.object!==node||parent.property.type!==\"Identifier\"||!bindOrCallOrApplyPattern.test(parent.property.name)||!isCallee(parent)||parent.parent.arguments.length===0||isNullOrUndefined(parent.parent.arguments[0]);// e.g.\n//   Reflect.apply(function() {}, obj, []);\n//   Array.from([], function() {}, obj);\n//   list.forEach(function() {}, obj);\ncase\"CallExpression\":if(isReflectApply(parent.callee)){return parent.arguments.length!==3||parent.arguments[0]!==node||isNullOrUndefined(parent.arguments[1]);}if(isArrayFromMethod(parent.callee)){return parent.arguments.length!==3||parent.arguments[1]!==node||isNullOrUndefined(parent.arguments[2]);}if(isMethodWhichHasThisArg(parent.callee)){return parent.arguments.length!==2||parent.arguments[0]!==node||isNullOrUndefined(parent.arguments[1]);}return true;// Otherwise `this` is default.\ndefault:return true;}}/* istanbul ignore next */return true;},/**\n     * Get the precedence level based on the node type\n     * @param {ASTNode} node node to evaluate\n     * @returns {int} precedence level\n     * @private\n     */getPrecedence:function getPrecedence(node){switch(node.type){case\"SequenceExpression\":return 0;case\"AssignmentExpression\":case\"ArrowFunctionExpression\":case\"YieldExpression\":return 1;case\"ConditionalExpression\":return 3;case\"LogicalExpression\":switch(node.operator){case\"||\":return 4;case\"&&\":return 5;// no default\n}/* falls through */case\"BinaryExpression\":switch(node.operator){case\"|\":return 6;case\"^\":return 7;case\"&\":return 8;case\"==\":case\"!=\":case\"===\":case\"!==\":return 9;case\"<\":case\"<=\":case\">\":case\">=\":case\"in\":case\"instanceof\":return 10;case\"<<\":case\">>\":case\">>>\":return 11;case\"+\":case\"-\":return 12;case\"*\":case\"/\":case\"%\":return 13;// no default\n}/* falls through */case\"UnaryExpression\":case\"AwaitExpression\":return 14;case\"UpdateExpression\":return 15;case\"CallExpression\":// IIFE is allowed to have parens in any position (#655)\nif(node.callee.type===\"FunctionExpression\"){return-1;}return 16;case\"NewExpression\":return 17;// no default\n}return 18;},/**\n     * Checks whether a given node is a loop node or not.\n     * The following types are loop nodes:\n     *\n     * - DoWhileStatement\n     * - ForInStatement\n     * - ForOfStatement\n     * - ForStatement\n     * - WhileStatement\n     *\n     * @param {ASTNode|null} node - A node to check.\n     * @returns {boolean} `true` if the node is a loop node.\n     */isLoop:function isLoop(node){return Boolean(node&&anyLoopPattern.test(node.type));},/**\n     * Checks whether a given node is a function node or not.\n     * The following types are function nodes:\n     *\n     * - ArrowFunctionExpression\n     * - FunctionDeclaration\n     * - FunctionExpression\n     *\n     * @param {ASTNode|null} node - A node to check.\n     * @returns {boolean} `true` if the node is a function node.\n     */isFunction:function isFunction(node){return Boolean(node&&anyFunctionPattern.test(node.type));},/**\n     * Gets the property name of a given node.\n     * The node can be a MemberExpression, a Property, or a MethodDefinition.\n     *\n     * If the name is dynamic, this returns `null`.\n     *\n     * For examples:\n     *\n     *     a.b           // => \"b\"\n     *     a[\"b\"]        // => \"b\"\n     *     a['b']        // => \"b\"\n     *     a[`b`]        // => \"b\"\n     *     a[100]        // => \"100\"\n     *     a[b]          // => null\n     *     a[\"a\" + \"b\"]  // => null\n     *     a[tag`b`]     // => null\n     *     a[`${b}`]     // => null\n     *\n     *     let a = {b: 1}            // => \"b\"\n     *     let a = {[\"b\"]: 1}        // => \"b\"\n     *     let a = {['b']: 1}        // => \"b\"\n     *     let a = {[`b`]: 1}        // => \"b\"\n     *     let a = {[100]: 1}        // => \"100\"\n     *     let a = {[b]: 1}          // => null\n     *     let a = {[\"a\" + \"b\"]: 1}  // => null\n     *     let a = {[tag`b`]: 1}     // => null\n     *     let a = {[`${b}`]: 1}     // => null\n     *\n     * @param {ASTNode} node - The node to get.\n     * @returns {string|null} The property name if static. Otherwise, null.\n     */getStaticPropertyName:function getStaticPropertyName(node){var prop=void 0;switch(node&&node.type){case\"Property\":case\"MethodDefinition\":prop=node.key;break;case\"MemberExpression\":prop=node.property;break;// no default\n}switch(prop&&prop.type){case\"Literal\":return String(prop.value);case\"TemplateLiteral\":if(prop.expressions.length===0&&prop.quasis.length===1){return prop.quasis[0].value.cooked;}break;case\"Identifier\":if(!node.computed){return prop.name;}break;// no default\n}return null;},/**\n     * Get directives from directive prologue of a Program or Function node.\n     * @param {ASTNode} node - The node to check.\n     * @returns {ASTNode[]} The directives found in the directive prologue.\n     */getDirectivePrologue:function getDirectivePrologue(node){var directives=[];// Directive prologues only occur at the top of files or functions.\nif(node.type===\"Program\"||node.type===\"FunctionDeclaration\"||node.type===\"FunctionExpression\"||// Do not check arrow functions with implicit return.\n// `() => \"use strict\";` returns the string `\"use strict\"`.\nnode.type===\"ArrowFunctionExpression\"&&node.body.type===\"BlockStatement\"){var statements=node.type===\"Program\"?node.body:node.body.body;var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{for(var _iterator20=(0,_getIterator5.default)(statements),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator20.next()).done);_iteratorNormalCompletion5=true){var statement=_step5.value;if(statement.type===\"ExpressionStatement\"&&statement.expression.type===\"Literal\"){directives.push(statement);}else{break;}}}catch(err){_didIteratorError5=true;_iteratorError5=err;}finally{try{if(!_iteratorNormalCompletion5&&_iterator20.return){_iterator20.return();}}finally{if(_didIteratorError5){throw _iteratorError5;}}}}return directives;},/**\n     * Determines whether this node is a decimal integer literal. If a node is a decimal integer literal, a dot added\n     after the node will be parsed as a decimal point, rather than a property-access dot.\n     * @param {ASTNode} node - The node to check.\n     * @returns {boolean} `true` if this node is a decimal integer.\n     * @example\n     *\n     * 5       // true\n     * 5.      // false\n     * 5.0     // false\n     * 05      // false\n     * 0x5     // false\n     * 0b101   // false\n     * 0o5     // false\n     * 5e0     // false\n     * '5'     // false\n     */isDecimalInteger:function isDecimalInteger(node){return node.type===\"Literal\"&&typeof node.value===\"number\"&&/^(0|[1-9]\\d*)$/.test(node.raw);}};},{}],265:[function(require,module,exports){(function(process){\"use strict\";var isWarnedForDeprecation=false;module.exports={meta:{deprecated:true,schema:[{\"enum\":[\"always\",\"never\"]},{\"type\":\"object\",\"properties\":{\"singleValue\":{\"type\":\"boolean\"},\"objectsInArrays\":{\"type\":\"boolean\"},\"arraysInArrays\":{\"type\":\"boolean\"}},\"additionalProperties\":false}]},create:function create(){return{Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The babel/array-bracket-spacing rule is deprecated. Please '+'use the built in array-bracket-spacing rule instead.');/* eslint-enable no-console */isWarnedForDeprecation=true;}};}};}).call(this,require(\"_process\"));},{\"_process\":594}],266:[function(require,module,exports){(function(process){\"use strict\";var isWarnedForDeprecation=false;module.exports={meta:{deprecated:true,schema:[{\"enum\":[\"always\",\"as-needed\"]}]},create:function create(){return{Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The babel/arrow-parens rule is deprecated. Please '+'use the built in arrow-parens rule instead.');/* eslint-enable no-console */isWarnedForDeprecation=true;}};}};}).call(this,require(\"_process\"));},{\"_process\":594}],267:[function(require,module,exports){(function(process){\"use strict\";var isWarnedForDeprecation=false;module.exports={meta:{deprecated:true,schema:[{\"enum\":[\"semicolon\",\"comma\"]}]},create:function create(){return{Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The babel/flow-object-type rule is deprecated. Please '+'use the flowtype/object-type-delimiter rule instead.\\n'+'Check out https://github.com/gajus/eslint-plugin-flowtype#eslint-plugin-flowtype-rules-object-type-delimiter');/* eslint-enable no-console */isWarnedForDeprecation=true;}};}};}).call(this,require(\"_process\"));},{\"_process\":594}],268:[function(require,module,exports){(function(process){'use strict';var isWarnedForDeprecation=false;module.exports={meta:{deprecated:true,schema:[{\"enum\":[\"always\",\"always-multiline\",\"only-multiline\",\"never\"]}]},create:function create(){return{Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The babel/func-params-comma-dangle rule is deprecated. Please '+'use the built in comma-dangle rule instead.');/* eslint-enable no-console */isWarnedForDeprecation=true;}};}};}).call(this,require(\"_process\"));},{\"_process\":594}],269:[function(require,module,exports){(function(process){\"use strict\";var isWarnedForDeprecation=false;module.exports={meta:{deprecated:true,schema:[{\"oneOf\":[{\"enum\":[\"before\",\"after\",\"both\",\"neither\"]},{\"type\":\"object\",\"properties\":{\"before\":{\"type\":\"boolean\"},\"after\":{\"type\":\"boolean\"}},\"additionalProperties\":false}]}]},create:function create(){return{Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The babel/generator-star-spacing rule is deprecated. Please '+'use the built in generator-star-spacing rule instead.');/* eslint-enable no-console */isWarnedForDeprecation=true;}};}};}).call(this,require(\"_process\"));},{\"_process\":594}],270:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of constructors without capital letters\n * @author Nicholas C. Zakas\n * @copyright 2014 Jordan Harband. All rights reserved.\n * @copyright 2013-2014 Nicholas C. Zakas. All rights reserved.\n * @copyright 2015 Mathieu M-Gosselin. All rights reserved.\n */\"use strict\";var CAPS_ALLOWED=[\"Array\",\"Boolean\",\"Date\",\"Error\",\"Function\",\"Number\",\"Object\",\"RegExp\",\"String\",\"Symbol\"];/**\n * Ensure that if the key is provided, it must be an array.\n * @param {Object} obj Object to check with `key`.\n * @param {string} key Object key to check on `obj`.\n * @param {*} fallback If obj[key] is not present, this will be returned.\n * @returns {string[]} Returns obj[key] if it's an Array, otherwise `fallback`\n */function checkArray(obj,key,fallback){/* istanbul ignore if */if(Object.prototype.hasOwnProperty.call(obj,key)&&!Array.isArray(obj[key])){throw new TypeError(key+\", if provided, must be an Array\");}return obj[key]||fallback;}/**\n * A reducer function to invert an array to an Object mapping the string form of the key, to `true`.\n * @param {Object} map Accumulator object for the reduce.\n * @param {string} key Object key to set to `true`.\n * @returns {Object} Returns the updated Object for further reduction.\n */function invert(map,key){map[key]=true;return map;}/**\n * Creates an object with the cap is new exceptions as its keys and true as their values.\n * @param {Object} config Rule configuration\n * @returns {Object} Object with cap is new exceptions.\n */function calculateCapIsNewExceptions(config){var capIsNewExceptions=checkArray(config,\"capIsNewExceptions\",CAPS_ALLOWED);if(capIsNewExceptions!==CAPS_ALLOWED){capIsNewExceptions=capIsNewExceptions.concat(CAPS_ALLOWED);}return capIsNewExceptions.reduce(invert,{});}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports=function(context){var config=context.options[0]||{};var NEW_IS_CAP=config.newIsCap!==false;var CAP_IS_NEW=config.capIsNew!==false;var newIsCapExceptions=checkArray(config,\"newIsCapExceptions\",[]).reduce(invert,{});var capIsNewExceptions=calculateCapIsNewExceptions(config);var listeners={};//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n     * Get exact callee name from expression\n     * @param {ASTNode} node CallExpression or NewExpression node\n     * @returns {string} name\n     */function extractNameFromExpression(node){var name=\"\",property;if(node.callee.type===\"MemberExpression\"){property=node.callee.property;if(property.type===\"Literal\"&&typeof property.value===\"string\"){name=property.value;}else if(property.type===\"Identifier\"&&!node.callee.computed){name=property.name;}}else{name=node.callee.name;}return name;}/**\n     * Returns the capitalization state of the string -\n     * Whether the first character is uppercase, lowercase, or non-alphabetic\n     * @param {string} str String\n     * @returns {string} capitalization state: \"non-alpha\", \"lower\", or \"upper\"\n     */function getCap(str){var firstChar=str.charAt(0);var firstCharLower=firstChar.toLowerCase();var firstCharUpper=firstChar.toUpperCase();if(firstCharLower===firstCharUpper){// char has no uppercase variant, so it's non-alphabetic\nreturn\"non-alpha\";}else if(firstChar===firstCharLower){return\"lower\";}else{return\"upper\";}}/**\n     * Returns whether a node is under a decorator or not.\n     * @param  {ASTNode}  node CallExpression node\n     * @returns {Boolean} Returns true if the node is under a decorator.\n     */function isDecorator(node){return node.parent.type===\"Decorator\";}/**\n     * Check if capitalization is allowed for a CallExpression\n     * @param {Object} allowedMap Object mapping calleeName to a Boolean\n     * @param {ASTNode} node CallExpression node\n     * @param {string} calleeName Capitalized callee name from a CallExpression\n     * @returns {Boolean} Returns true if the callee may be capitalized\n     */function isCapAllowed(allowedMap,node,calleeName){if(allowedMap[calleeName]||allowedMap[context.getSource(node.callee)]){return true;}if(calleeName===\"UTC\"&&node.callee.type===\"MemberExpression\"){// allow if callee is Date.UTC\nreturn node.callee.object.type===\"Identifier\"&&node.callee.object.name===\"Date\";}return false;}/**\n     * Reports the given message for the given node. The location will be the start of the property or the callee.\n     * @param {ASTNode} node CallExpression or NewExpression node.\n     * @param {string} message The message to report.\n     * @returns {void}\n     */function report(node,message){var callee=node.callee;if(callee.type===\"MemberExpression\"){callee=callee.property;}context.report(node,callee.loc.start,message);}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nif(NEW_IS_CAP){listeners.NewExpression=function(node){var constructorName=extractNameFromExpression(node);if(constructorName){var capitalization=getCap(constructorName);var isAllowed=capitalization!==\"lower\"||isCapAllowed(newIsCapExceptions,node,constructorName);if(!isAllowed){report(node,\"A constructor name should not start with a lowercase letter.\");}}};}if(CAP_IS_NEW){listeners.CallExpression=function(node){var calleeName=extractNameFromExpression(node);if(calleeName){var capitalization=getCap(calleeName);var isAllowed=capitalization!==\"upper\"||isDecorator(node)||isCapAllowed(capIsNewExceptions,node,calleeName);if(!isAllowed){report(node,\"A function with a name starting with an uppercase letter should only be used as a constructor.\");}}};}return listeners;};module.exports.schema=[{\"type\":\"object\",\"properties\":{\"newIsCap\":{\"type\":\"boolean\"},\"capIsNew\":{\"type\":\"boolean\"},\"newIsCapExceptions\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"capIsNewExceptions\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"additionalProperties\":false}];},{}],271:[function(require,module,exports){/**\n * @fileoverview Rule to disallow uses of await inside of loops.\n * @author Nat Mote\n */\"use strict\";// Node types which are considered loops.\nvar loopTypes={'ForStatement':true,'ForOfStatement':true,'ForInStatement':true,'WhileStatement':true,'DoWhileStatement':true};// Node types at which we should stop looking for loops. For example, it is fine to declare an async\n// function within a loop, and use await inside of that.\nvar boundaryTypes={'FunctionDeclaration':true,'FunctionExpression':true,'ArrowFunctionExpression':true};module.exports=function(context){return{AwaitExpression:function AwaitExpression(node){var ancestors=context.getAncestors();// Reverse so that we can traverse from the deepest node upwards.\nancestors.reverse();// Create a set of all the ancestors plus this node so that we can check\n// if this use of await appears in the body of the loop as opposed to\n// the right-hand side of a for...of, for example.\n//\n// Implement the set with an Array since there are likely to be very few\n// elements. An Object would not be appropriate since the elements are\n// not strings.\nvar ancestorSet=[].concat(ancestors,[node]);var ancestorSetHas=function ancestorSetHas(element){return ancestorSet.indexOf(element)!==-1;};for(var i=0;i<ancestors.length;i++){var ancestor=ancestors[i];if(boundaryTypes.hasOwnProperty(ancestor.type)){// Short-circuit out if we encounter a boundary type. Loops above\n// this do not matter.\nreturn;}if(loopTypes.hasOwnProperty(ancestor.type)){// Only report if we are actually in the body or another part that gets executed on\n// every iteration.\nif(ancestorSetHas(ancestor.body)||ancestorSetHas(ancestor.test)||ancestorSetHas(ancestor.update)){context.report(node,'Avoid using await inside a loop. Consider refactoring to use Promise.all. If '+'you are sure you want to do this, add `// eslint-disable-line '+context.id+'` at the end of this line.');return;}}}}};};},{}],272:[function(require,module,exports){/**\n * @fileoverview A rule to disallow `this` keywords outside of classes or class-like objects.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `this` keywords outside of classes or class-like objects\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var stack=[],sourceCode=context.getSourceCode();var insideClassProperty=false;/**\n         * Gets the current checking context.\n         *\n         * The return value has a flag that whether or not `this` keyword is valid.\n         * The flag is initialized when got at the first time.\n         *\n         * @returns {{valid: boolean}}\n         *   an object which has a flag that whether or not `this` keyword is valid.\n         */stack.getCurrent=function(){var current=this[this.length-1];if(!current.init){current.init=true;current.valid=!astUtils.isDefaultThisBinding(current.node,sourceCode);}return current;};/**\n         * `this` should be fair game anywhere inside a class property.\n         *\n         * @returns {void}\n         */function enterClassProperty(){insideClassProperty=true;}/**\n         * Back to the normal check.\n         * @returns {void}\n         */function exitClassProperty(){insideClassProperty=false;}/**\n         * Pushs new checking context into the stack.\n         *\n         * The checking context is not initialized yet.\n         * Because most functions don't have `this` keyword.\n         * When `this` keyword was found, the checking context is initialized.\n         *\n         * @param {ASTNode} node - A function node that was entered.\n         * @returns {void}\n         */function enterFunction(node){// `this` can be invalid only under strict mode.\nstack.push({init:!context.getScope().isStrict,node:node,valid:true});}/**\n         * Pops the current checking context from the stack.\n         * @returns {void}\n         */function exitFunction(){stack.pop();}return{/*\n             * `this` is invalid only under strict mode.\n             * Modules is always strict mode.\n             */Program:function Program(node){var scope=context.getScope(),features=context.parserOptions.ecmaFeatures||{};stack.push({init:true,node:node,valid:!(scope.isStrict||node.sourceType===\"module\"||features.globalReturn&&scope.childScopes[0].isStrict)});},\"Program:exit\":function ProgramExit(){stack.pop();},ClassProperty:enterClassProperty,\"ClassProperty:exit\":exitClassProperty,FunctionDeclaration:enterFunction,\"FunctionDeclaration:exit\":exitFunction,FunctionExpression:enterFunction,\"FunctionExpression:exit\":exitFunction,// Reports if `this` of the current context is invalid.\nThisExpression:function ThisExpression(node){var current=stack.getCurrent();if(!insideClassProperty&&current&&!current.valid){context.report(node,\"Unexpected 'this'.\");}}};}};},{\"../ast-utils\":264}],273:[function(require,module,exports){/**\n * @fileoverview Disallows or enforces spaces inside of object literals.\n * @author Jamund Ferguson\n * @copyright 2014 Brandyn Bennett. All rights reserved.\n * @copyright 2014 Michael Ficarra. No rights reserved.\n * @copyright 2014 Vignesh Anand. All rights reserved.\n * @copyright 2015 Jamund Ferguson. All rights reserved.\n * @copyright 2015 Mathieu M-Gosselin. All rights reserved.\n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports=function(context){var spaced=context.options[0]===\"always\",sourceCode=context.getSourceCode();/**\n     * Determines whether an option is set, relative to the spacing option.\n     * If spaced is \"always\", then check whether option is set to false.\n     * If spaced is \"never\", then check whether option is set to true.\n     * @param {Object} option - The option to exclude.\n     * @returns {boolean} Whether or not the property is excluded.\n     */function isOptionSet(option){return context.options[1]!=null?context.options[1][option]===!spaced:false;}var options={spaced:spaced,arraysInObjectsException:isOptionSet(\"arraysInObjects\"),objectsInObjectsException:isOptionSet(\"objectsInObjects\")};//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n     * Determines whether two adjacent tokens are have whitespace between them.\n     * @param {Object} left - The left token object.\n     * @param {Object} right - The right token object.\n     * @returns {boolean} Whether or not there is space between the tokens.\n     */function isSpaced(left,right){return sourceCode.isSpaceBetweenTokens(left,right);}/**\n     * Determines whether two adjacent tokens are on the same line.\n     * @param {Object} left - The left token object.\n     * @param {Object} right - The right token object.\n     * @returns {boolean} Whether or not the tokens are on the same line.\n     */function isSameLine(left,right){return left.loc.start.line===right.loc.start.line;}/**\n    * Reports that there shouldn't be a space after the first token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportNoBeginningSpace(node,token){context.report({node:node,loc:token.loc.end,message:\"There should be no space after '\"+token.value+\"'\",fix:function fix(fixer){var nextToken=sourceCode.getTokenAfter(token);return fixer.removeRange([token.range[1],nextToken.range[0]]);}});}/**\n    * Reports that there shouldn't be a space before the last token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportNoEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"There should be no space before '\"+token.value+\"'\",fix:function fix(fixer){var previousToken=sourceCode.getTokenBefore(token);return fixer.removeRange([previousToken.range[1],token.range[0]]);}});}/**\n    * Reports that there should be a space after the first token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportRequiredBeginningSpace(node,token){context.report({node:node,loc:token.loc.end,message:\"A space is required after '\"+token.value+\"'\",fix:function fix(fixer){return fixer.insertTextAfter(token,\" \");}});}/**\n    * Reports that there should be a space before the last token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportRequiredEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"A space is required before '\"+token.value+\"'\",fix:function fix(fixer){return fixer.insertTextBefore(token,\" \");}});}/**\n     * Determines if spacing in curly braces is valid.\n     * @param {ASTNode} node The AST node to check.\n     * @param {Token} first The first token to check (should be the opening brace)\n     * @param {Token} second The second token to check (should be first after the opening brace)\n     * @param {Token} penultimate The penultimate token to check (should be last before closing brace)\n     * @param {Token} last The last token to check (should be closing brace)\n     * @returns {void}\n     */function validateBraceSpacing(node,first,second,penultimate,last){var closingCurlyBraceMustBeSpaced=options.arraysInObjectsException&&penultimate.value===\"]\"||options.objectsInObjectsException&&penultimate.value===\"}\"?!options.spaced:options.spaced;if(isSameLine(first,second)){if(options.spaced&&!isSpaced(first,second)){reportRequiredBeginningSpace(node,first);}if(!options.spaced&&isSpaced(first,second)){reportNoBeginningSpace(node,first);}}if(isSameLine(penultimate,last)){if(closingCurlyBraceMustBeSpaced&&!isSpaced(penultimate,last)){reportRequiredEndingSpace(node,last);}if(!closingCurlyBraceMustBeSpaced&&isSpaced(penultimate,last)){reportNoEndingSpace(node,last);}}}/**\n     * Reports a given object node if spacing in curly braces is invalid.\n     * @param {ASTNode} node - An ObjectExpression or ObjectPattern node to check.\n     * @returns {void}\n     */function checkForObject(node){if(node.properties.length===0){return;}var firstSpecifier=node.properties[0],lastSpecifier=node.properties[node.properties.length-1];var first=sourceCode.getTokenBefore(firstSpecifier),last=sourceCode.getTokenAfter(lastSpecifier);// support trailing commas\nif(last.value===\",\"){last=sourceCode.getTokenAfter(last);}var second=sourceCode.getTokenAfter(first),penultimate=sourceCode.getTokenBefore(last);validateBraceSpacing(node,first,second,penultimate,last);}/**\n     * Reports a given import node if spacing in curly braces is invalid.\n     * @param {ASTNode} node - An ImportDeclaration node to check.\n     * @returns {void}\n     */function checkForImport(node){if(node.specifiers.length===0){return;}var firstSpecifier=node.specifiers[0],lastSpecifier=node.specifiers[node.specifiers.length-1];if(lastSpecifier.type!==\"ImportSpecifier\"){return;}if(firstSpecifier.type!==\"ImportSpecifier\"){firstSpecifier=node.specifiers[1];}var first=sourceCode.getTokenBefore(firstSpecifier),last=sourceCode.getTokenAfter(lastSpecifier);// to support a trailing comma.\nif(last.value===\",\"){last=sourceCode.getTokenAfter(last);}var second=sourceCode.getTokenAfter(first),penultimate=sourceCode.getTokenBefore(last);validateBraceSpacing(node,first,second,penultimate,last);}/**\n     * Reports a given export node if spacing in curly braces is invalid.\n     * @param {ASTNode} node - An ExportNamedDeclaration node to check.\n     * @returns {void}\n     */function checkForExport(node){if(node.specifiers.length===0){return;}var firstSpecifier=node.specifiers[0],lastSpecifier=node.specifiers[node.specifiers.length-1],first=sourceCode.getTokenBefore(firstSpecifier),last=sourceCode.getTokenAfter(lastSpecifier);// export * as x from '...';\n// export x from '...';\nif(first.value===\"export\"){return;}// to support a trailing comma.\nif(last.value===\",\"){last=sourceCode.getTokenAfter(last);}var second=sourceCode.getTokenAfter(first),penultimate=sourceCode.getTokenBefore(last);validateBraceSpacing(node,first,second,penultimate,last);}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{// var {x} = y;\nObjectPattern:checkForObject,// var y = {x: 'y'}\nObjectExpression:checkForObject,// import {y} from 'x';\nImportDeclaration:checkForImport,// export {name} from 'yo';\nExportNamedDeclaration:checkForExport};};module.exports.schema=[{\"enum\":[\"always\",\"never\"]},{\"type\":\"object\",\"properties\":{\"arraysInObjects\":{\"type\":\"boolean\"},\"objectsInObjects\":{\"type\":\"boolean\"}},\"additionalProperties\":false}];},{}],274:[function(require,module,exports){(function(process){\"use strict\";var isWarnedForDeprecation=false;module.exports={meta:{deprecated:true,schema:[{\"enum\":[\"always\",\"methods\",\"properties\",\"never\"]}]},create:function create(){return{Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The babel/object-shorthand rule is deprecated. Please '+'use the built in object-shorthand rule instead.');/* eslint-enable no-console */isWarnedForDeprecation=true;}};}};}).call(this,require(\"_process\"));},{\"_process\":594}],275:[function(require,module,exports){/**\n * @fileoverview Rule to flag missing semicolons.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow semicolons instead of ASI\",category:\"Stylistic Issues\",recommended:false},fixable:\"code\",schema:{anyOf:[{type:\"array\",items:[{enum:[\"never\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"always\"]},{type:\"object\",properties:{omitLastInOneLineBlock:{type:\"boolean\"}},additionalProperties:false}],minItems:0,maxItems:2}]}},create:function create(context){var OPT_OUT_PATTERN=/^[-[(/+`]/;// One of [(/+-`\nvar options=context.options[1];var never=context.options[0]===\"never\",exceptOneLine=options&&options.omitLastInOneLineBlock===true,sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Reports a semicolon error with appropriate location and message.\n         * @param {ASTNode} node The node with an extra or missing semicolon.\n         * @param {boolean} missing True if the semicolon is missing.\n         * @returns {void}\n         */function report(node,missing){var lastToken=sourceCode.getLastToken(node);var message=void 0,fix=void 0,loc=lastToken.loc;if(!missing){message=\"Missing semicolon.\";loc=loc.end;fix=function fix(fixer){return fixer.insertTextAfter(lastToken,\";\");};}else{message=\"Extra semicolon.\";loc=loc.start;fix=function fix(fixer){return fixer.remove(lastToken);};}context.report({node:node,loc:loc,message:message,fix:fix});}/**\n         * Checks whether a token is a semicolon punctuator.\n         * @param {Token} token The token.\n         * @returns {boolean} True if token is a semicolon punctuator.\n         */function isSemicolon(token){return token.type===\"Punctuator\"&&token.value===\";\";}/**\n         * Check if a semicolon is unnecessary, only true if:\n         *   - next token is on a new line and is not one of the opt-out tokens\n         *   - next token is a valid statement divider\n         * @param {Token} lastToken last token of current node.\n         * @returns {boolean} whether the semicolon is unnecessary.\n         */function isUnnecessarySemicolon(lastToken){if(!isSemicolon(lastToken)){return false;}var nextToken=sourceCode.getTokenAfter(lastToken);if(!nextToken){return true;}var lastTokenLine=lastToken.loc.end.line;var nextTokenLine=nextToken.loc.start.line;var isOptOutToken=OPT_OUT_PATTERN.test(nextToken.value)&&nextToken.value!==\"++\"&&nextToken.value!==\"--\";var isDivider=nextToken.value===\"}\"||nextToken.value===\";\";return lastTokenLine!==nextTokenLine&&!isOptOutToken||isDivider;}/**\n         * Checks a node to see if it's in a one-liner block statement.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} whether the node is in a one-liner block statement.\n         */function isOneLinerBlock(node){var nextToken=sourceCode.getTokenAfter(node);if(!nextToken||nextToken.value!==\"}\"){return false;}var parent=node.parent;return parent&&parent.type===\"BlockStatement\"&&parent.loc.start.line===parent.loc.end.line;}/**\n         * Checks a node to see if it's followed by a semicolon.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */function checkForSemicolon(node){var lastToken=sourceCode.getLastToken(node);if(never){if(isUnnecessarySemicolon(lastToken)){report(node,true);}}else{if(!isSemicolon(lastToken)){if(!exceptOneLine||!isOneLinerBlock(node)){report(node);}}else{if(exceptOneLine&&isOneLinerBlock(node)){report(node,true);}}}}/**\n         * Checks to see if there's a semicolon after a variable declaration.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */function checkForSemicolonForVariableDeclaration(node){var ancestors=context.getAncestors(),parentIndex=ancestors.length-1,parent=ancestors[parentIndex];if((parent.type!==\"ForStatement\"||parent.init!==node)&&(!/^For(?:In|Of)Statement/.test(parent.type)||parent.left!==node)){checkForSemicolon(node);}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{VariableDeclaration:checkForSemicolonForVariableDeclaration,ExpressionStatement:checkForSemicolon,ReturnStatement:checkForSemicolon,ThrowStatement:checkForSemicolon,DoWhileStatement:checkForSemicolon,DebuggerStatement:checkForSemicolon,BreakStatement:checkForSemicolon,ContinueStatement:checkForSemicolon,ImportDeclaration:checkForSemicolon,ExportAllDeclaration:checkForSemicolon,ClassProperty:checkForSemicolon,ExportNamedDeclaration:function ExportNamedDeclaration(node){if(!node.declaration){checkForSemicolon(node);}},ExportDefaultDeclaration:function ExportDefaultDeclaration(node){if(!/(?:Class|Function)Declaration/.test(node.declaration.type)){checkForSemicolon(node);}}};}};},{}],276:[function(require,module,exports){/**\n * @fileoverview Detects color literals\n * @author Aaron Greenwald\n */'use strict';var util=require(\"util\");var Components=require(\"../util/Components\");var styleSheet=require(\"../util/stylesheet\");var StyleSheets=styleSheet.StyleSheets;var astHelpers=styleSheet.astHelpers;module.exports=Components.detect(function(context){var styleSheets=new StyleSheets();function reportColorLiterals(colorLiterals){if(colorLiterals){colorLiterals.forEach(function(style){if(style){var expression=util.inspect(style.expression);context.report({node:style.node,message:'Color literal: {{expression}}',data:{expression:expression}});}});}}return{VariableDeclarator:function VariableDeclarator(node){if(astHelpers.isStyleSheetDeclaration(node)){var styles=astHelpers.getStyleDeclarations(node);if(styles){styles.forEach(function(style){var literals=astHelpers.collectColorLiterals(style.value,context);styleSheets.addColorLiterals(literals);});}}},JSXAttribute:function JSXAttribute(node){if(astHelpers.isStyleAttribute(node)){var literals=astHelpers.collectColorLiterals(node.value,context);styleSheets.addColorLiterals(literals);}},'Program:exit':function ProgramExit(){return reportColorLiterals(styleSheets.getColorLiterals());}};});module.exports.schema=[];},{\"../util/Components\":280,\"../util/stylesheet\":281,\"util\":602}],277:[function(require,module,exports){/**\n * @fileoverview Detects inline styles\n * @author Aaron Greenwald\n */'use strict';var util=require(\"util\");var Components=require(\"../util/Components\");var styleSheet=require(\"../util/stylesheet\");var StyleSheets=styleSheet.StyleSheets;var astHelpers=styleSheet.astHelpers;module.exports=Components.detect(function(context){var styleSheets=new StyleSheets();function reportInlineStyles(inlineStyles){if(inlineStyles){inlineStyles.forEach(function(style){if(style){var expression=util.inspect(style.expression);context.report({node:style.node,message:'Inline style: {{expression}}',data:{expression:expression}});}});}}return{JSXAttribute:function JSXAttribute(node){if(astHelpers.isStyleAttribute(node)){var styles=astHelpers.collectStyleObjectExpressions(node.value,context);styleSheets.addObjectExpressions(styles);}},'Program:exit':function ProgramExit(){return reportInlineStyles(styleSheets.getObjectExpressions());}};});module.exports.schema=[];},{\"../util/Components\":280,\"../util/stylesheet\":281,\"util\":602}],278:[function(require,module,exports){/**\n * @fileoverview Detects unused styles\n * @author Tom Hastjarjanto\n */'use strict';var Components=require(\"../util/Components\");var styleSheet=require(\"../util/stylesheet\");var StyleSheets=styleSheet.StyleSheets;var astHelpers=styleSheet.astHelpers;module.exports=Components.detect(function(context,components){var styleSheets=new StyleSheets();var styleReferences=new _set3.default();function reportUnusedStyles(unusedStyles){(0,_keys4.default)(unusedStyles).forEach(function(key){if({}.hasOwnProperty.call(unusedStyles,key)){var styles=unusedStyles[key];styles.forEach(function(node){var message=['Unused style detected: ',key,'.',node.key.name].join('');context.report(node,message);});}});}return{MemberExpression:function MemberExpression(node){var styleRef=astHelpers.getPotentialStyleReferenceFromMemberExpression(node);if(styleRef){styleReferences.add(styleRef);}},VariableDeclarator:function VariableDeclarator(node){if(astHelpers.isStyleSheetDeclaration(node)){var styleSheetName=astHelpers.getStyleSheetName(node);var styles=astHelpers.getStyleDeclarations(node);styleSheets.add(styleSheetName,styles);}},'Program:exit':function ProgramExit(){var list=components.all();if((0,_keys4.default)(list).length>0){styleReferences.forEach(function(reference){styleSheets.markAsUsed(reference);});reportUnusedStyles(styleSheets.getUnusedReferences());}}};});module.exports.schema=[];},{\"../util/Components\":280,\"../util/stylesheet\":281}],279:[function(require,module,exports){/**\n * @fileoverview Android and IOS components should be\n * used in platform specific React Native components.\n * @author Tom Hastjarjanto\n */'use strict';module.exports=function(context){var reactComponents=[];var androidMessage='Android components should be placed in android files';var iosMessage='IOS components should be placed in ios files';var conflictMessage='IOS and Android components can\\'t be mixed';function getKeyValue(node){var key=node.key||node.argument;return key.type==='Identifier'?key.name:key.value;}function hasNodeWithName(nodes,name){return nodes.some(function(node){var nodeName=getKeyValue(node);return nodeName&&nodeName.includes(name);});}function reportErrors(components,filename){var containsAndroidAndIOS=hasNodeWithName(components,'IOS')&&hasNodeWithName(components,'Android');components.forEach(function(node){var propName=getKeyValue(node);if(propName.includes('IOS')&&!filename.endsWith('.ios.js')){context.report(node,containsAndroidAndIOS?conflictMessage:iosMessage);}if(propName.includes('Android')&&!filename.endsWith('.android.js')){context.report(node,containsAndroidAndIOS?conflictMessage:androidMessage);}});}return{VariableDeclarator:function VariableDeclarator(node){var destructuring=node.init&&node.id&&node.id.type==='ObjectPattern';var statelessDestructuring=destructuring&&node.init.name==='React';if(destructuring&&statelessDestructuring){reactComponents=reactComponents.concat(node.id.properties);}},'Program:exit':function ProgramExit(){var filename=context.getFilename();reportErrors(reactComponents,filename);}};};module.exports.schema=[];},{}],280:[function(require,module,exports){/**\n * @fileoverview Utility class and functions for React components detection\n * @author Yannick Croissant\n */'use strict';/**\n * Components\n * @class\n */function Components(){this.list={};this.getId=function(node){return node&&node.range.join(':');};}/**\n * Add a node to the components list, or update it if it's already in the list\n *\n * @param {ASTNode} node The AST node being added.\n * @param {Number} confidence Confidence in the component detection (0=banned, 1=maybe, 2=yes)\n */Components.prototype.add=function(node,confidence){var id=this.getId(node);if(this.list[id]){if(confidence===0||this.list[id].confidence===0){this.list[id].confidence=0;}else{this.list[id].confidence=Math.max(this.list[id].confidence,confidence);}return;}this.list[id]={node:node,confidence:confidence};};/**\n * Find a component in the list using its node\n *\n * @param {ASTNode} node The AST node being searched.\n * @returns {Object} Component object, undefined if the component is not found\n */Components.prototype.get=function(node){var id=this.getId(node);return this.list[id];};/**\n * Update a component in the list\n *\n * @param {ASTNode} node The AST node being updated.\n * @param {Object} props Additional properties to add to the component.\n */Components.prototype.set=function(node,props){var currentNode=node;while(currentNode&&!this.list[this.getId(currentNode)]){currentNode=node.parent;}if(!currentNode){return;}var id=this.getId(currentNode);this.list[id]=(0,_assign4.default)({},this.list[id],props);};/**\n * Return the components list\n * Components for which we are not confident are not returned\n *\n * @returns {Object} Components list\n */Components.prototype.all=function(){var _this10=this;var list={};(0,_keys4.default)(this.list).forEach(function(i){if({}.hasOwnProperty.call(_this10.list,i)&&_this10.list[i].confidence>=2){list[i]=_this10.list[i];}});return list;};/**\n * Return the length of the components list\n * Components for which we are not confident are not counted\n *\n * @returns {Number} Components list length\n */Components.prototype.length=function(){var _this11=this;var length=0;(0,_keys4.default)(this.list).forEach(function(i){if({}.hasOwnProperty.call(_this11.list,i)&&_this11.list[i].confidence>=2){length+=1;}});return length;};function componentRule(rule,context){var sourceCode=context.getSourceCode();var components=new Components();// Utilities for component detection\nvar utils={/**\n     * Check if the node is a React ES5 component\n     *\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node is a React ES5 component, false if not\n     */isES5Component:function isES5Component(node){if(!node.parent){return false;}return /^(React\\.)?createClass$/.test(sourceCode.getText(node.parent.callee));},/**\n     * Check if the node is a React ES6 component\n     *\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node is a React ES6 component, false if not\n     */isES6Component:function isES6Component(node){if(!node.superClass){return false;}return /^(React\\.)?Component$/.test(sourceCode.getText(node.superClass));},/**\n     * Check if the node is returning JSX\n     *\n     * @param {ASTNode} node The AST node being checked (must be a ReturnStatement).\n     * @returns {Boolean} True if the node is returning JSX, false if not\n     */isReturningJSX:function isReturningJSX(node){var property=void 0;switch(node.type){case'ReturnStatement':property='argument';break;case'ArrowFunctionExpression':property='body';break;default:return false;}var returnsJSX=node[property]&&node[property].type==='JSXElement';var returnsReactCreateElement=node[property]&&node[property].callee&&node[property].callee.property&&node[property].callee.property.name==='createElement';return Boolean(returnsJSX||returnsReactCreateElement);},/**\n     * Get the parent component node from the current scope\n     *\n     * @returns {ASTNode} component node, null if we are not in a component\n     */getParentComponent:function getParentComponent(){return utils.getParentES6Component()||utils.getParentES5Component()||utils.getParentStatelessComponent();},/**\n     * Get the parent ES5 component node from the current scope\n     *\n     * @returns {ASTNode} component node, null if we are not in a component\n     */getParentES5Component:function getParentES5Component(){var scope=context.getScope();while(scope){var node=scope.block&&scope.block.parent&&scope.block.parent.parent;if(node&&utils.isES5Component(node)){return node;}scope=scope.upper;}return null;},/**\n     * Get the parent ES6 component node from the current scope\n     *\n     * @returns {ASTNode} component node, null if we are not in a component\n     */getParentES6Component:function getParentES6Component(){var scope=context.getScope();while(scope&&scope.type!=='class'){scope=scope.upper;}var node=scope&&scope.block;if(!node||!utils.isES6Component(node)){return null;}return node;},/**\n     * Get the parent stateless component node from the current scope\n     *\n     * @returns {ASTNode} component node, null if we are not in a component\n     */getParentStatelessComponent:function getParentStatelessComponent(){var scope=context.getScope();while(scope){var node=scope.block;// Ignore non functions\nvar isFunction=/Function/.test(node.type);// Ignore classes methods\nvar isNotMethod=!node.parent||node.parent.type!=='MethodDefinition';// Ignore arguments (callback, etc.)\nvar isNotArgument=!node.parent||node.parent.type!=='CallExpression';if(isFunction&&isNotMethod&&isNotArgument){return node;}scope=scope.upper;}return null;},/**\n     * Get the related component from a node\n     *\n     * @param {ASTNode} node The AST node being checked (must be a MemberExpression).\n     * @returns {ASTNode} component node, null if we cannot find the component\n     */getRelatedComponent:function getRelatedComponent(node){var currentNode=node;var i=void 0;var j=void 0;var k=void 0;var l=void 0;// Get the component path\nvar componentPath=[];while(currentNode){if(currentNode.property&&currentNode.property.type==='Identifier'){componentPath.push(currentNode.property.name);}if(currentNode.object&&currentNode.object.type==='Identifier'){componentPath.push(currentNode.object.name);}currentNode=currentNode.object;}componentPath.reverse();// Find the variable in the current scope\nvar variableName=componentPath.shift();if(!variableName){return null;}var variableInScope=void 0;var variables=context.getScope().variables;for(i=0,j=variables.length;i<j;i++){// eslint-disable-line no-plusplus\nif(variables[i].name===variableName){variableInScope=variables[i];break;}}if(!variableInScope){return null;}// Find the variable declaration\nvar defInScope=void 0;var defs=variableInScope.defs;for(i=0,j=defs.length;i<j;i++){// eslint-disable-line no-plusplus\nif(defs[i].type==='ClassName'||defs[i].type==='FunctionName'||defs[i].type==='Variable'){defInScope=defs[i];break;}}if(!defInScope){return null;}currentNode=defInScope.node.init||defInScope.node;// Traverse the node properties to the component declaration\nfor(i=0,j=componentPath.length;i<j;i++){// eslint-disable-line no-plusplus\nif(!currentNode.properties){continue;// eslint-disable-line no-continue\n}for(k=0,l=currentNode.properties.length;k<l;k++){// eslint-disable-line no-plusplus, max-len\nif(currentNode.properties[k].key.name===componentPath[i]){currentNode=currentNode.properties[k];break;}}if(!currentNode){return null;}currentNode=currentNode.value;}// Return the component\nreturn components.get(currentNode);}};// Component detection instructions\nvar detectionInstructions={ClassDeclaration:function ClassDeclaration(node){if(!utils.isES6Component(node)){return;}components.add(node,2);},ClassProperty:function ClassProperty(){var node=utils.getParentComponent();if(!node){return;}components.add(node,2);},ObjectExpression:function ObjectExpression(node){if(!utils.isES5Component(node)){return;}components.add(node,2);},FunctionExpression:function FunctionExpression(){var node=utils.getParentComponent();if(!node){return;}components.add(node,1);},FunctionDeclaration:function FunctionDeclaration(){var node=utils.getParentComponent();if(!node){return;}components.add(node,1);},ArrowFunctionExpression:function ArrowFunctionExpression(){var node=utils.getParentComponent();if(!node){return;}if(node.expression&&utils.isReturningJSX(node)){components.add(node,2);}else{components.add(node,1);}},ThisExpression:function ThisExpression(){var node=utils.getParentComponent();if(!node||!/Function/.test(node.type)){return;}// Ban functions with a ThisExpression\ncomponents.add(node,0);},ReturnStatement:function ReturnStatement(node){if(!utils.isReturningJSX(node)){return;}var parentNode=utils.getParentComponent();if(!parentNode){return;}components.add(parentNode,2);}};// Update the provided rule instructions to add the component detection\nvar ruleInstructions=rule(context,components,utils);var updatedRuleInstructions=(0,_assign4.default)({},ruleInstructions);(0,_keys4.default)(detectionInstructions).forEach(function(instruction){updatedRuleInstructions[instruction]=function(node){detectionInstructions[instruction](node);return ruleInstructions[instruction]?ruleInstructions[instruction](node):undefined;};});// Return the updated rule instructions\nreturn updatedRuleInstructions;}Components.detect=function(rule){return componentRule.bind(this,rule);};module.exports=Components;},{}],281:[function(require,module,exports){'use strict';/**\n * StyleSheets represents the StyleSheets found in the source code.\n * @constructor\n */function StyleSheets(){this.styleSheets={};}/**\n * Add adds a StyleSheet to our StyleSheets collections.\n *\n * @param {string} styleSheetName - The name of the StyleSheet.\n * @param {object} properties - The collection of rules in the styleSheet.\n */StyleSheets.prototype.add=function(styleSheetName,properties){this.styleSheets[styleSheetName]=properties;};/**\n * MarkAsUsed marks a rule as used in our source code by removing it from the\n * specified StyleSheet rules.\n *\n * @param {string} fullyQualifiedName - The fully qualified name of the rule.\n * for example 'styles.text'\n */StyleSheets.prototype.markAsUsed=function(fullyQualifiedName){var nameSplit=fullyQualifiedName.split('.');var styleSheetName=nameSplit[0];var styleSheetProperty=nameSplit[1];if(this.styleSheets[styleSheetName]){this.styleSheets[styleSheetName]=this.styleSheets[styleSheetName].filter(function(property){return property.key.name!==styleSheetProperty;});}};/**\n * GetUnusedReferences returns all collected StyleSheets and their\n * unmarked rules.\n */StyleSheets.prototype.getUnusedReferences=function(){return this.styleSheets;};/**\n * AddColorLiterals adds an array of expressions that contain color literals\n * to the ColorLiterals collection\n * @param {array} expressions - an array of expressions containing color literals\n */StyleSheets.prototype.addColorLiterals=function(expressions){if(!this.colorLiterals){this.colorLiterals=[];}this.colorLiterals=this.colorLiterals.concat(expressions);};/**\n * GetColorLiterals returns an array of collected color literals expressions\n * @returns {Array}\n */StyleSheets.prototype.getColorLiterals=function(){return this.colorLiterals;};/**\n * AddObjectexpressions adds an array of expressions to the ObjectExpressions collection\n * @param {Array} expressions - an array of expressions containing ObjectExpressions in\n * inline styles\n */StyleSheets.prototype.addObjectExpressions=function(expressions){if(!this.objectExpressions){this.objectExpressions=[];}this.objectExpressions=this.objectExpressions.concat(expressions);};/**\n * GetObjectExpressions returns an array of collected object expressiosn used in inline styles\n * @returns {Array}\n */StyleSheets.prototype.getObjectExpressions=function(){return this.objectExpressions;};var currentContent=void 0;var getSourceCode=function getSourceCode(node){return currentContent.getSourceCode(node).getText(node);};var astHelpers={containsStyleSheetObject:function containsStyleSheetObject(node){return Boolean(node&&node.init&&node.init.callee&&node.init.callee.object&&node.init.callee.object.name==='StyleSheet');},containsCreateCall:function containsCreateCall(node){return Boolean(node&&node.init&&node.init.callee&&node.init.callee.property&&node.init.callee.property.name==='create');},isStyleSheetDeclaration:function isStyleSheetDeclaration(node){return Boolean(astHelpers.containsStyleSheetObject(node)&&astHelpers.containsCreateCall(node));},getStyleSheetName:function getStyleSheetName(node){if(node&&node.id){return node.id.name;}},getStyleDeclarations:function getStyleDeclarations(node){if(node&&node.init&&node.init.arguments&&node.init.arguments[0]&&node.init.arguments[0].properties){return node.init.arguments[0].properties;}return[];},isStyleAttribute:function isStyleAttribute(node){return Boolean(node.type==='JSXAttribute'&&node.name&&node.name.name&&node.name.name.toLowerCase().includes('style'));},collectStyleObjectExpressions:function collectStyleObjectExpressions(node,context){currentContent=context;if(astHelpers.hasArrayOfStyleReferences(node)){var styleReferenceContainers=node.expression.elements;return astHelpers.collectStyleObjectExpressionFromContainers(styleReferenceContainers);}else if(node&&node.expression){return astHelpers.getStyleObjectExpressionFromNode(node.expression);}return[];},collectColorLiterals:function collectColorLiterals(node,context){if(!node){return[];}currentContent=context;if(astHelpers.hasArrayOfStyleReferences(node)){var styleReferenceContainers=node.expression.elements;return astHelpers.collectColorLiteralsFromContainers(styleReferenceContainers);}if(node.type==='ObjectExpression'){return astHelpers.getColorLiteralsFromNode(node);}return astHelpers.getColorLiteralsFromNode(node.expression);},collectStyleObjectExpressionFromContainers:function collectStyleObjectExpressionFromContainers(nodes){var objectExpressions=[];nodes.forEach(function(node){objectExpressions=objectExpressions.concat(astHelpers.getStyleObjectExpressionFromNode(node));});return objectExpressions;},collectColorLiteralsFromContainers:function collectColorLiteralsFromContainers(nodes){var colorLiterals=[];nodes.forEach(function(node){colorLiterals=colorLiterals.concat(astHelpers.getColorLiteralsFromNode(node));});return colorLiterals;},getStyleReferenceFromNode:function getStyleReferenceFromNode(node){var styleReference=void 0;var leftStyleReferences=void 0;var rightStyleReferences=void 0;if(!node){return[];}switch(node.type){case'MemberExpression':styleReference=astHelpers.getStyleReferenceFromExpression(node);return[styleReference];case'LogicalExpression':leftStyleReferences=astHelpers.getStyleReferenceFromNode(node.left);rightStyleReferences=astHelpers.getStyleReferenceFromNode(node.right);return[].concat(leftStyleReferences).concat(rightStyleReferences);case'ConditionalExpression':leftStyleReferences=astHelpers.getStyleReferenceFromNode(node.consequent);rightStyleReferences=astHelpers.getStyleReferenceFromNode(node.alternate);return[].concat(leftStyleReferences).concat(rightStyleReferences);default:return[];}},getStyleObjectExpressionFromNode:function getStyleObjectExpressionFromNode(node){var leftStyleObjectExpression=void 0;var rightStyleObjectExpression=void 0;if(!node){return[];}if(node.type==='ObjectExpression'){return[astHelpers.getStyleObjectFromExpression(node)];}switch(node.type){case'LogicalExpression':leftStyleObjectExpression=astHelpers.getStyleObjectExpressionFromNode(node.left);rightStyleObjectExpression=astHelpers.getStyleObjectExpressionFromNode(node.right);return[].concat(leftStyleObjectExpression).concat(rightStyleObjectExpression);case'ConditionalExpression':leftStyleObjectExpression=astHelpers.getStyleObjectExpressionFromNode(node.consequent);rightStyleObjectExpression=astHelpers.getStyleObjectExpressionFromNode(node.alternate);return[].concat(leftStyleObjectExpression).concat(rightStyleObjectExpression);default:return[];}},getColorLiteralsFromNode:function getColorLiteralsFromNode(node){var leftColorLiterals=void 0;var rightColorLiterals=void 0;if(!node){return[];}if(node.type==='ObjectExpression'){return[astHelpers.getColorLiteralsFromExpression(node)];}switch(node.type){case'LogicalExpression':leftColorLiterals=astHelpers.getColorLiteralsFromNode(node.left);rightColorLiterals=astHelpers.getColorLiteralsFromNode(node.right);return[].concat(leftColorLiterals).concat(rightColorLiterals);case'ConditionalExpression':leftColorLiterals=astHelpers.getColorLiteralsFromNode(node.consequent);rightColorLiterals=astHelpers.getColorLiteralsFromNode(node.alternate);return[].concat(leftColorLiterals).concat(rightColorLiterals);default:return[];}},hasArrayOfStyleReferences:function hasArrayOfStyleReferences(node){return node&&Boolean(node.type==='JSXExpressionContainer'&&node.expression&&node.expression.type==='ArrayExpression');},getStyleReferenceFromExpression:function getStyleReferenceFromExpression(node){var result=[];var name=astHelpers.getObjectName(node);if(name){result.push(name);}var property=astHelpers.getPropertyName(node);if(property){result.push(property);}return result.join('.');},getStyleObjectFromExpression:function getStyleObjectFromExpression(node){var obj={};var invalid=false;if(node.properties&&node.properties.length){node.properties.forEach(function(p){if(!p.value||!p.key){return;}if(p.value.type==='Literal'){invalid=true;obj[p.key.name]=p.value.value;}else if(p.value.type==='ConditionalExpression'){var innerNode=p.value;if(innerNode.consequent.type==='Literal'||innerNode.alternate.type==='Literal'){invalid=true;obj[p.key.name]=getSourceCode(innerNode);}}else if(p.value.type==='UnaryExpression'&&p.value.operator==='-'){invalid=true;obj[p.key.name]=-1*p.value.argument.value;}else if(p.value.type==='UnaryExpression'&&p.value.operator==='+'){invalid=true;obj[p.key.name]=p.value.argument.value;}});}return invalid?{expression:obj,node:node}:undefined;},getColorLiteralsFromExpression:function getColorLiteralsFromExpression(node){var obj={};var invalid=false;if(node.properties&&node.properties.length){node.properties.forEach(function(p){if(p.key&&p.key.name&&p.key.name.toLowerCase().indexOf('color')!==-1){if(p.value.type==='Literal'){invalid=true;obj[p.key.name]=p.value.value;}else if(p.value.type==='ConditionalExpression'){var innerNode=p.value;if(innerNode.consequent.type==='Literal'||innerNode.alternate.type==='Literal'){invalid=true;obj[p.key.name]=getSourceCode(innerNode);}}}});}return invalid?{expression:obj,node:node}:undefined;},getObjectName:function getObjectName(node){if(node&&node.object&&node.object.name){return node.object.name;}},getPropertyName:function getPropertyName(node){if(node&&node.property&&node.property.name){return node.property.name;}},getPotentialStyleReferenceFromMemberExpression:function getPotentialStyleReferenceFromMemberExpression(node){if(node&&node.object&&node.object.type==='Identifier'&&node.object.name&&node.property&&node.property.type==='Identifier'&&node.property.name&&node.parent.type!=='MemberExpression'){return[node.object.name,node.property.name].join('.');}}};module.exports.astHelpers=astHelpers;module.exports.StyleSheets=StyleSheets;},{}],282:[function(require,module,exports){/**\n * @fileoverview Prevent missing displayName in a React component definition\n * @author Yannick Croissant\n */'use strict';var has=require(\"has\");var Components=require(\"../util/Components\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent missing displayName in a React component definition',category:'Best Practices',recommended:true},schema:[{type:'object',properties:{ignoreTranspilerName:{type:'boolean'}},additionalProperties:false}]},create:Components.detect(function(context,components,utils){var sourceCode=context.getSourceCode();var config=context.options[0]||{};var ignoreTranspilerName=config.ignoreTranspilerName||false;var MISSING_MESSAGE='Component definition is missing display name';/**\n     * Checks if we are declaring a display name\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are declaring a display name, false if not.\n     */function isDisplayNameDeclaration(node){switch(node.type){// Special case for class properties\n// (babel-eslint does not expose property name so we have to rely on tokens)\ncase'ClassProperty':var tokens=sourceCode.getFirstTokens(node,2);if(tokens[0].value==='displayName'||tokens[1]&&tokens[1].value==='displayName'){return true;}return false;case'Identifier':return node.name==='displayName';case'Literal':return node.value==='displayName';default:return false;}}/**\n     * Mark a prop type as declared\n     * @param {ASTNode} node The AST node being checked.\n     */function markDisplayNameAsDeclared(node){components.set(node,{hasDisplayName:true});}/**\n     * Reports missing display name for a given component\n     * @param {Object} component The component to process\n     */function reportMissingDisplayName(component){context.report({node:component.node,message:MISSING_MESSAGE,data:{component:component.name}});}/**\n     * Checks if the component have a name set by the transpiler\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if component has a name, false if not.\n     */function hasTranspilerName(node){var namedObjectAssignment=node.type==='ObjectExpression'&&node.parent&&node.parent.parent&&node.parent.parent.type==='AssignmentExpression'&&(!node.parent.parent.left.object||node.parent.parent.left.object.name!=='module'||node.parent.parent.left.property.name!=='exports');var namedObjectDeclaration=node.type==='ObjectExpression'&&node.parent&&node.parent.parent&&node.parent.parent.type==='VariableDeclarator';var namedClass=(node.type==='ClassDeclaration'||node.type==='ClassExpression')&&node.id&&node.id.name;var namedFunctionDeclaration=(node.type==='FunctionDeclaration'||node.type==='FunctionExpression')&&node.id&&node.id.name;var namedFunctionExpression=(node.type==='FunctionExpression'||node.type==='ArrowFunctionExpression')&&node.parent&&(node.parent.type==='VariableDeclarator'||node.parent.method===true)&&(!node.parent.parent||!utils.isES5Component(node.parent.parent));if(namedObjectAssignment||namedObjectDeclaration||namedClass||namedFunctionDeclaration||namedFunctionExpression){return true;}return false;}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{ClassProperty:function ClassProperty(node){if(!isDisplayNameDeclaration(node)){return;}markDisplayNameAsDeclared(node);},MemberExpression:function MemberExpression(node){if(!isDisplayNameDeclaration(node.property)){return;}var component=utils.getRelatedComponent(node);if(!component){return;}markDisplayNameAsDeclared(component.node);},FunctionExpression:function FunctionExpression(node){if(ignoreTranspilerName||!hasTranspilerName(node)){return;}markDisplayNameAsDeclared(node);},FunctionDeclaration:function FunctionDeclaration(node){if(ignoreTranspilerName||!hasTranspilerName(node)){return;}markDisplayNameAsDeclared(node);},ArrowFunctionExpression:function ArrowFunctionExpression(node){if(ignoreTranspilerName||!hasTranspilerName(node)){return;}markDisplayNameAsDeclared(node);},MethodDefinition:function MethodDefinition(node){if(!isDisplayNameDeclaration(node.key)){return;}markDisplayNameAsDeclared(node);},ClassExpression:function ClassExpression(node){if(ignoreTranspilerName||!hasTranspilerName(node)){return;}markDisplayNameAsDeclared(node);},ClassDeclaration:function ClassDeclaration(node){if(ignoreTranspilerName||!hasTranspilerName(node)){return;}markDisplayNameAsDeclared(node);},ObjectExpression:function ObjectExpression(node){if(ignoreTranspilerName||!hasTranspilerName(node)){// Search for the displayName declaration\nnode.properties.forEach(function(property){if(!property.key||!isDisplayNameDeclaration(property.key)){return;}markDisplayNameAsDeclared(node);});return;}markDisplayNameAsDeclared(node);},'Program:exit':function ProgramExit(){var list=components.list();// Report missing display name for all components\nfor(var component in list){if(!has(list,component)||list[component].hasDisplayName){continue;}reportMissingDisplayName(list[component]);}}};})};},{\"../util/Components\":343,\"has\":376}],283:[function(require,module,exports){/**\n * @fileoverview Forbid certain props on components\n * @author Joe Lencioni\n */'use strict';// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DEFAULTS=['className','style'];// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Forbid certain props on components',category:'Best Practices',recommended:false},schema:[{type:'object',properties:{forbid:{type:'array',items:{type:'string'}}},additionalProperties:true}]},create:function create(context){function isForbidden(prop){var configuration=context.options[0]||{};var forbid=configuration.forbid||DEFAULTS;return forbid.indexOf(prop)>=0;}return{JSXAttribute:function JSXAttribute(node){var tag=node.parent.name.name;if(tag&&tag[0]!==tag[0].toUpperCase()){// This is a DOM node, not a Component, so exit.\nreturn;}var prop=node.name.name;if(!isForbidden(prop)){return;}context.report({node:node,message:'Prop `'+prop+'` is forbidden on Components'});}};}};},{}],284:[function(require,module,exports){/**\n * @fileoverview Forbid certain elements\n * @author Kenneth Chung\n */'use strict';var has=require(\"has\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Forbid certain elements',category:'Best Practices',recommended:false},schema:[{type:'object',properties:{forbid:{type:'array',items:{anyOf:[{type:'string'},{type:'object',properties:{element:{type:'string'},message:{type:'string'}},required:['element'],additionalProperties:false}]}}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();var configuration=context.options[0]||{};var forbidConfiguration=configuration.forbid||[];var indexedForbidConfigs={};forbidConfiguration.forEach(function(item){if(typeof item==='string'){indexedForbidConfigs[item]={element:item};}else{indexedForbidConfigs[item.element]=item;}});function errorMessageForElement(name){var message='<'+name+'> is forbidden';var additionalMessage=indexedForbidConfigs[name].message;if(additionalMessage){message=message+', '+additionalMessage;}return message;}function isValidCreateElement(node){return node.callee&&node.callee.type==='MemberExpression'&&node.callee.object.name==='React'&&node.callee.property.name==='createElement'&&node.arguments.length>0;}function reportIfForbidden(element,node){if(has(indexedForbidConfigs,element)){context.report({node:node,message:errorMessageForElement(element)});}}return{JSXOpeningElement:function JSXOpeningElement(node){reportIfForbidden(sourceCode.getText(node.name),node.name);},CallExpression:function CallExpression(node){if(!isValidCreateElement(node)){return;}var argument=node.arguments[0];var argType=argument.type;if(argType==='Identifier'&&/^[A-Z_]/.test(argument.name)){reportIfForbidden(argument.name,argument);}else if(argType==='Literal'&&/^[a-z][^\\.]*$/.test(argument.value)){reportIfForbidden(argument.value,argument);}else if(argType==='MemberExpression'){reportIfForbidden(sourceCode.getText(argument),argument);}}};}};},{\"has\":376}],285:[function(require,module,exports){/**\n * @fileoverview Forbid using another component's propTypes\n * @author Ian Christian Myers\n */'use strict';var find=require(\"array.prototype.find\");// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\n// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Forbid using another component\\'s propTypes',category:'Best Practices',recommended:false}},create:function create(context){// --------------------------------------------------------------------------\n// Helpers\n// --------------------------------------------------------------------------\nfunction isLeftSideOfAssignment(node){return node.parent.type==='AssignmentExpression'&&node.parent.left===node;}return{MemberExpression:function MemberExpression(node){if(!node.computed&&node.property&&node.property.type==='Identifier'&&node.property.name==='propTypes'&&!isLeftSideOfAssignment(node)||node.property&&node.property.type==='Literal'&&node.property.value==='propTypes'&&!isLeftSideOfAssignment(node)){context.report({node:node.property,message:'Using another component\\'s propTypes is forbidden'});}},ObjectPattern:function ObjectPattern(node){var propTypesNode=find(node.properties,function(property){return property.type==='Property'&&property.key.name==='propTypes';});if(propTypesNode){context.report({node:propTypesNode,message:'Using another component\\'s propTypes is forbidden'});}}};}};},{\"array.prototype.find\":8}],286:[function(require,module,exports){/**\n * @fileoverview Forbid certain propTypes\n */'use strict';// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DEFAULTS=['any','array','object'];// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Forbid certain propTypes',category:'Best Practices',recommended:false},schema:[{type:'object',properties:{forbid:{type:'array',items:{type:'string'}}},additionalProperties:true}]},create:function create(context){function isForbidden(type){var configuration=context.options[0]||{};var forbid=configuration.forbid||DEFAULTS;return forbid.indexOf(type)>=0;}/**\n     * Checks if node is `propTypes` declaration\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if node is `propTypes` declaration, false if not.\n     */function isPropTypesDeclaration(node){// Special case for class properties\n// (babel-eslint does not expose property name so we have to rely on tokens)\nif(node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);if(tokens[0].value==='propTypes'||tokens[1]&&tokens[1].value==='propTypes'){return true;}return false;}return Boolean(node&&node.name==='propTypes');}/**\n     * Checks if propTypes declarations are forbidden\n     * @param {Array} declarations The array of AST nodes being checked.\n     * @returns {void}\n     */function checkForbidden(declarations){declarations.forEach(function(declaration){if(declaration.type!=='Property'){return;}var target;var value=declaration.value;if(value.type==='MemberExpression'&&value.property&&value.property.name&&value.property.name==='isRequired'){value=value.object;}if(value.type==='CallExpression'&&value.callee.type==='MemberExpression'){value=value.callee;}if(value.property){target=value.property.name;}else if(value.type==='Identifier'){target=value.name;}if(isForbidden(target)){context.report({node:declaration,message:'Prop type `'+target+'` is forbidden'});}});}return{ClassProperty:function ClassProperty(node){if(isPropTypesDeclaration(node)&&node.value&&node.value.type==='ObjectExpression'){checkForbidden(node.value.properties);}},MemberExpression:function MemberExpression(node){if(isPropTypesDeclaration(node.property)){var right=node.parent.right;if(right&&right.type==='ObjectExpression'){checkForbidden(right.properties);}}},ObjectExpression:function ObjectExpression(node){node.properties.forEach(function(property){if(!property.key){return;}if(!isPropTypesDeclaration(property.key)){return;}if(property.value.type==='ObjectExpression'){checkForbidden(property.value.properties);}});}};}};},{}],287:[function(require,module,exports){/**\n * @fileoverview Enforce boolean attributes notation in JSX\n * @author Yannick Croissant\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce boolean attributes notation in JSX',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{enum:['always','never']}]},create:function create(context){var configuration=context.options[0]||'never';var NEVER_MESSAGE='Value must be omitted for boolean attributes';var ALWAYS_MESSAGE='Value must be set for boolean attributes';return{JSXAttribute:function JSXAttribute(node){switch(configuration){case'always':if(node.value===null){context.report({node:node,message:ALWAYS_MESSAGE,fix:function fix(fixer){return fixer.insertTextAfter(node,'={true}');}});}break;case'never':if(node.value&&node.value.type==='JSXExpressionContainer'&&node.value.expression.value===true){context.report({node:node,message:NEVER_MESSAGE,fix:function fix(fixer){return fixer.removeRange([node.name.range[1],node.value.range[1]]);}});}break;default:break;}}};}};},{}],288:[function(require,module,exports){/**\n * @fileoverview Validate closing bracket location in JSX\n * @author Yannick Croissant\n */'use strict';var has=require(\"has\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Validate closing bracket location in JSX',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{oneOf:[{enum:['after-props','props-aligned','tag-aligned','line-aligned']},{type:'object',properties:{location:{enum:['after-props','props-aligned','tag-aligned','line-aligned']}},additionalProperties:false},{type:'object',properties:{nonEmpty:{enum:['after-props','props-aligned','tag-aligned','line-aligned',false]},selfClosing:{enum:['after-props','props-aligned','tag-aligned','line-aligned',false]}},additionalProperties:false}]}]},create:function create(context){var MESSAGE='The closing bracket must be {{location}}{{details}}';var MESSAGE_LOCATION={'after-props':'placed after the last prop','after-tag':'placed after the opening tag','props-aligned':'aligned with the last prop','tag-aligned':'aligned with the opening tag','line-aligned':'aligned with the line containing the opening tag'};var DEFAULT_LOCATION='tag-aligned';var sourceCode=context.getSourceCode();var config=context.options[0];var options={nonEmpty:DEFAULT_LOCATION,selfClosing:DEFAULT_LOCATION};if(typeof config==='string'){// simple shorthand [1, 'something']\noptions.nonEmpty=config;options.selfClosing=config;}else if((typeof config===\"undefined\"?\"undefined\":(0,_typeof6.default)(config))==='object'){// [1, {location: 'something'}] (back-compat)\nif(has(config,'location')){options.nonEmpty=config.location;options.selfClosing=config.location;}// [1, {nonEmpty: 'something'}]\nif(has(config,'nonEmpty')){options.nonEmpty=config.nonEmpty;}// [1, {selfClosing: 'something'}]\nif(has(config,'selfClosing')){options.selfClosing=config.selfClosing;}}/**\n     * Get expected location for the closing bracket\n     * @param {Object} tokens Locations of the opening bracket, closing bracket and last prop\n     * @return {String} Expected location for the closing bracket\n     */function getExpectedLocation(tokens){var location;// Is always after the opening tag if there is no props\nif(typeof tokens.lastProp==='undefined'){location='after-tag';// Is always after the last prop if this one is on the same line as the opening bracket\n}else if(tokens.opening.line===tokens.lastProp.lastLine){location='after-props';// Else use configuration dependent on selfClosing property\n}else{location=tokens.selfClosing?options.selfClosing:options.nonEmpty;}return location;}/**\n     * Get the correct 0-indexed column for the closing bracket, given the\n     * expected location.\n     * @param {Object} tokens Locations of the opening bracket, closing bracket and last prop\n     * @param {String} expectedLocation Expected location for the closing bracket\n     * @return {?Number} The correct column for the closing bracket, or null\n     */function getCorrectColumn(tokens,expectedLocation){switch(expectedLocation){case'props-aligned':return tokens.lastProp.column;case'tag-aligned':return tokens.opening.column;case'line-aligned':return tokens.openingStartOfLine.column;default:return null;}}/**\n     * Check if the closing bracket is correctly located\n     * @param {Object} tokens Locations of the opening bracket, closing bracket and last prop\n     * @param {String} expectedLocation Expected location for the closing bracket\n     * @return {Boolean} True if the closing bracket is correctly located, false if not\n     */function hasCorrectLocation(tokens,expectedLocation){switch(expectedLocation){case'after-tag':return tokens.tag.line===tokens.closing.line;case'after-props':return tokens.lastProp.lastLine===tokens.closing.line;case'props-aligned':case'tag-aligned':case'line-aligned':var correctColumn=getCorrectColumn(tokens,expectedLocation);return correctColumn===tokens.closing.column;default:return true;}}/**\n     * Get the characters used for indentation on the line to be matched\n     * @param {Object} tokens Locations of the opening bracket, closing bracket and last prop\n     * @param {String} expectedLocation Expected location for the closing bracket\n     * @param {Number} correctColumn Expected column for the closing bracket\n     * @return {String} The characters used for indentation\n     */function getIndentation(tokens,expectedLocation,correctColumn){var indentation,spaces=[];switch(expectedLocation){case'props-aligned':indentation=/^\\s*/.exec(sourceCode.lines[tokens.lastProp.firstLine-1])[0];break;case'tag-aligned':case'line-aligned':indentation=/^\\s*/.exec(sourceCode.lines[tokens.opening.line-1])[0];break;default:indentation='';}if(indentation.length+1<correctColumn){// Non-whitespace characters were included in the column offset\nspaces=new Array(+correctColumn+1-indentation.length);}return indentation+spaces.join(' ');}/**\n     * Get the locations of the opening bracket, closing bracket, last prop, and\n     * start of opening line.\n     * @param {ASTNode} node The node to check\n     * @return {Object} Locations of the opening bracket, closing bracket, last\n     * prop and start of opening line.\n     */function getTokensLocations(node){var opening=sourceCode.getFirstToken(node).loc.start;var closing=sourceCode.getLastTokens(node,node.selfClosing?2:1)[0].loc.start;var tag=sourceCode.getFirstToken(node.name).loc.start;var lastProp;if(node.attributes.length){lastProp=node.attributes[node.attributes.length-1];lastProp={column:sourceCode.getFirstToken(lastProp).loc.start.column,firstLine:sourceCode.getFirstToken(lastProp).loc.start.line,lastLine:sourceCode.getLastToken(lastProp).loc.end.line};}var openingLine=sourceCode.lines[opening.line-1];var openingStartOfLine={column:/^\\s*/.exec(openingLine)[0].length,line:opening.line};return{tag:tag,opening:opening,closing:closing,lastProp:lastProp,selfClosing:node.selfClosing,openingStartOfLine:openingStartOfLine};}/**\n     * Get an unique ID for a given JSXOpeningElement\n     *\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {String} Unique ID (based on its range)\n     */function getOpeningElementId(node){return node.range.join(':');}var lastAttributeNode={};return{JSXAttribute:function JSXAttribute(node){lastAttributeNode[getOpeningElementId(node.parent)]=node;},JSXSpreadAttribute:function JSXSpreadAttribute(node){lastAttributeNode[getOpeningElementId(node.parent)]=node;},'JSXOpeningElement:exit':function JSXOpeningElementExit(node){var attributeNode=lastAttributeNode[getOpeningElementId(node)];var cachedLastAttributeEndPos=attributeNode?attributeNode.end:null;var expectedNextLine;var tokens=getTokensLocations(node);var expectedLocation=getExpectedLocation(tokens);if(hasCorrectLocation(tokens,expectedLocation)){return;}var data={location:MESSAGE_LOCATION[expectedLocation],details:''};var correctColumn=getCorrectColumn(tokens,expectedLocation);if(correctColumn!==null){expectedNextLine=tokens.lastProp&&tokens.lastProp.lastLine===tokens.closing.line;data.details=' (expected column '+(correctColumn+1)+(expectedNextLine?' on the next line)':')');}context.report({node:node,loc:tokens.closing,message:MESSAGE,data:data,fix:function fix(fixer){var closingTag=tokens.selfClosing?'/>':'>';switch(expectedLocation){case'after-tag':if(cachedLastAttributeEndPos){return fixer.replaceTextRange([cachedLastAttributeEndPos,node.end],(expectedNextLine?'\\n':'')+closingTag);}return fixer.replaceTextRange([node.name.range[1],node.end],(expectedNextLine?'\\n':' ')+closingTag);case'after-props':return fixer.replaceTextRange([cachedLastAttributeEndPos,node.end],(expectedNextLine?'\\n':'')+closingTag);case'props-aligned':case'tag-aligned':case'line-aligned':return fixer.replaceTextRange([cachedLastAttributeEndPos,node.end],'\\n'+getIndentation(tokens,expectedLocation,correctColumn)+closingTag);default:return true;}}});}};}};},{\"has\":376}],289:[function(require,module,exports){/**\n * @fileoverview Enforce or disallow spaces inside of curly braces in JSX attributes.\n * @author Jamund Ferguson\n * @author Brandyn Bennett\n * @author Michael Ficarra\n * @author Vignesh Anand\n * @author Jamund Ferguson\n * @author Yannick Croissant\n * @author Erik Wendel\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nvar SPACING={always:'always',never:'never'};var SPACING_VALUES=[SPACING.always,SPACING.never];module.exports={meta:{docs:{description:'Enforce or disallow spaces inside of curly braces in JSX attributes',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{enum:SPACING_VALUES},{type:'object',properties:{allowMultiline:{type:'boolean'},spacing:{type:'object',properties:{objectLiterals:{enum:SPACING_VALUES}}}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();var spaced=context.options[0]===SPACING.always;var multiline=context.options[1]?context.options[1].allowMultiline:true;var spacing=context.options[1]?context.options[1].spacing||{}:{};var defaultSpacing=spaced?SPACING.always:SPACING.never;var objectLiteralSpacing=spacing.objectLiterals||(spaced?SPACING.always:SPACING.never);// --------------------------------------------------------------------------\n// Helpers\n// --------------------------------------------------------------------------\n/**\n     * Determines whether two adjacent tokens have a newline between them.\n     * @param {Object} left - The left token object.\n     * @param {Object} right - The right token object.\n     * @returns {boolean} Whether or not there is a newline between the tokens.\n     */function isMultiline(left,right){return left.loc.start.line!==right.loc.start.line;}/**\n    * Reports that there shouldn't be a newline after the first token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportNoBeginningNewline(node,token){context.report({node:node,loc:token.loc.start,message:'There should be no newline after \\''+token.value+'\\'',fix:function fix(fixer){var nextToken=sourceCode.getTokenAfter(token);return fixer.replaceTextRange([token.range[1],nextToken.range[0]],spaced?' ':'');}});}/**\n    * Reports that there shouldn't be a newline before the last token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportNoEndingNewline(node,token){context.report({node:node,loc:token.loc.start,message:'There should be no newline before \\''+token.value+'\\'',fix:function fix(fixer){var previousToken=sourceCode.getTokenBefore(token);return fixer.replaceTextRange([previousToken.range[1],token.range[0]],spaced?' ':'');}});}/**\n    * Reports that there shouldn't be a space after the first token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportNoBeginningSpace(node,token){context.report({node:node,loc:token.loc.start,message:'There should be no space after \\''+token.value+'\\'',fix:function fix(fixer){var nextToken=sourceCode.getTokenAfter(token);var leadingComments=sourceCode.getNodeByRangeIndex(nextToken.range[0]).leadingComments;var rangeEndRef=leadingComments?leadingComments[0]:nextToken;return fixer.removeRange([token.range[1],rangeEndRef.range[0]]);}});}/**\n    * Reports that there shouldn't be a space before the last token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportNoEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:'There should be no space before \\''+token.value+'\\'',fix:function fix(fixer){var previousToken=sourceCode.getTokenBefore(token);var trailingComments=sourceCode.getNodeByRangeIndex(previousToken.range[0]).trailingComments;var rangeStartRef=trailingComments?trailingComments[trailingComments.length-1]:previousToken;return fixer.removeRange([rangeStartRef.range[1],token.range[0]]);}});}/**\n    * Reports that there should be a space after the first token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportRequiredBeginningSpace(node,token){context.report({node:node,loc:token.loc.start,message:'A space is required after \\''+token.value+'\\'',fix:function fix(fixer){return fixer.insertTextAfter(token,' ');}});}/**\n    * Reports that there should be a space before the last token\n    * @param {ASTNode} node - The node to report in the event of an error.\n    * @param {Token} token - The token to use for the report.\n    * @returns {void}\n    */function reportRequiredEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:'A space is required before \\''+token.value+'\\'',fix:function fix(fixer){return fixer.insertTextBefore(token,' ');}});}/**\n     * Determines if spacing in curly braces is valid.\n     * @param {ASTNode} node The AST node to check.\n     * @returns {void}\n     */function validateBraceSpacing(node){// Only validate attributes\nif(node.parent.type==='JSXElement'){return;}var first=context.getFirstToken(node);var last=sourceCode.getLastToken(node);var second=context.getTokenAfter(first);var penultimate=sourceCode.getTokenBefore(last);var leadingComments=sourceCode.getNodeByRangeIndex(second.range[0]).leadingComments;second=leadingComments?leadingComments[0]:second;var trailingComments=sourceCode.getNodeByRangeIndex(penultimate.range[0]).trailingComments;penultimate=trailingComments?trailingComments[trailingComments.length-1]:penultimate;var isObjectLiteral=first.value===second.value;if(isObjectLiteral){if(objectLiteralSpacing===SPACING.never){if(sourceCode.isSpaceBetweenTokens(first,second)){reportNoBeginningSpace(node,first);}else if(!multiline&&isMultiline(first,second)){reportNoBeginningNewline(node,first);}if(sourceCode.isSpaceBetweenTokens(penultimate,last)){reportNoEndingSpace(node,last);}else if(!multiline&&isMultiline(penultimate,last)){reportNoEndingNewline(node,last);}}else if(objectLiteralSpacing===SPACING.always){if(!sourceCode.isSpaceBetweenTokens(first,second)){reportRequiredBeginningSpace(node,first);}else if(!multiline&&isMultiline(first,second)){reportNoBeginningNewline(node,first);}if(!sourceCode.isSpaceBetweenTokens(penultimate,last)){reportRequiredEndingSpace(node,last);}else if(!multiline&&isMultiline(penultimate,last)){reportNoEndingNewline(node,last);}}}else if(defaultSpacing===SPACING.always){if(!sourceCode.isSpaceBetweenTokens(first,second)){reportRequiredBeginningSpace(node,first);}else if(!multiline&&isMultiline(first,second)){reportNoBeginningNewline(node,first);}if(!sourceCode.isSpaceBetweenTokens(penultimate,last)){reportRequiredEndingSpace(node,last);}else if(!multiline&&isMultiline(penultimate,last)){reportNoEndingNewline(node,last);}}else if(defaultSpacing===SPACING.never){if(isMultiline(first,second)){if(!multiline){reportNoBeginningNewline(node,first);}}else if(sourceCode.isSpaceBetweenTokens(first,second)){reportNoBeginningSpace(node,first);}if(isMultiline(penultimate,last)){if(!multiline){reportNoEndingNewline(node,last);}}else if(sourceCode.isSpaceBetweenTokens(penultimate,last)){reportNoEndingSpace(node,last);}}}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{JSXExpressionContainer:validateBraceSpacing,JSXSpreadAttribute:validateBraceSpacing};}};},{}],290:[function(require,module,exports){/**\n * @fileoverview Disallow or enforce spaces around equal signs in JSX attributes.\n * @author ryym\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Disallow or enforce spaces around equal signs in JSX attributes',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{enum:['always','never']}]},create:function create(context){var config=context.options[0];var sourceCode=context.getSourceCode();/**\n     * Determines a given attribute node has an equal sign.\n     * @param {ASTNode} attrNode - The attribute node.\n     * @returns {boolean} Whether or not the attriute node has an equal sign.\n     */function hasEqual(attrNode){return attrNode.type!=='JSXSpreadAttribute'&&attrNode.value!==null;}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{JSXOpeningElement:function JSXOpeningElement(node){node.attributes.forEach(function(attrNode){if(!hasEqual(attrNode)){return;}var equalToken=sourceCode.getTokenAfter(attrNode.name);var spacedBefore=sourceCode.isSpaceBetweenTokens(attrNode.name,equalToken);var spacedAfter=sourceCode.isSpaceBetweenTokens(equalToken,attrNode.value);switch(config){default:case'never':if(spacedBefore){context.report({node:attrNode,loc:equalToken.loc.start,message:'There should be no space before \\'=\\'',fix:function fix(fixer){return fixer.removeRange([attrNode.name.range[1],equalToken.start]);}});}if(spacedAfter){context.report({node:attrNode,loc:equalToken.loc.start,message:'There should be no space after \\'=\\'',fix:function fix(fixer){return fixer.removeRange([equalToken.end,attrNode.value.range[0]]);}});}break;case'always':if(!spacedBefore){context.report({node:attrNode,loc:equalToken.loc.start,message:'A space is required before \\'=\\'',fix:function fix(fixer){return fixer.insertTextBefore(equalToken,' ');}});}if(!spacedAfter){context.report({node:attrNode,loc:equalToken.loc.start,message:'A space is required after \\'=\\'',fix:function fix(fixer){return fixer.insertTextAfter(equalToken,' ');}});}break;}});}};}};},{}],291:[function(require,module,exports){/**\n * @fileoverview Restrict file extensions that may contain JSX\n * @author Joe Lencioni\n */'use strict';var path=require(\"path\");// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DEFAULTS={extensions:['.jsx']};// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Restrict file extensions that may contain JSX',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{extensions:{type:'array',items:{type:'string'}}},additionalProperties:false}]},create:function create(context){function getExtensionsConfig(){return context.options[0]&&context.options[0].extensions||DEFAULTS.extensions;}var invalidExtension;var invalidNode;// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{JSXElement:function JSXElement(node){var filename=context.getFilename();if(filename==='<text>'){return;}if(invalidNode){return;}var allowedExtensions=getExtensionsConfig();var isAllowedExtension=allowedExtensions.some(function(extension){return filename.slice(-extension.length)===extension;});if(isAllowedExtension){return;}invalidNode=node;invalidExtension=path.extname(filename);},'Program:exit':function ProgramExit(){if(!invalidNode){return;}context.report({node:invalidNode,message:'JSX not allowed in files with extension \\''+invalidExtension+'\\''});}};}};},{\"path\":587}],292:[function(require,module,exports){/**\n * @fileoverview Ensure proper position of the first property in JSX\n * @author Joachim Seminck\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Ensure proper position of the first property in JSX',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{enum:['always','never','multiline','multiline-multiprop']}]},create:function create(context){var configuration=context.options[0];function isMultilineJSX(jsxNode){return jsxNode.loc.start.line<jsxNode.loc.end.line;}return{JSXOpeningElement:function JSXOpeningElement(node){if(configuration==='multiline'&&isMultilineJSX(node)||configuration==='multiline-multiprop'&&isMultilineJSX(node)&&node.attributes.length>1||configuration==='always'){node.attributes.some(function(decl){if(decl.loc.start.line===node.loc.start.line){context.report({node:decl,message:'Property should be placed on a new line',fix:function fix(fixer){return fixer.replaceTextRange([node.name.end,decl.start],'\\n');}});}return true;});}else if(configuration==='never'&&node.attributes.length>0){var firstNode=node.attributes[0];if(node.loc.start.line<firstNode.loc.start.line){context.report({node:firstNode,message:'Property should be placed on the same line as the component declaration',fix:function fix(fixer){return fixer.replaceTextRange([node.name.end,firstNode.start],' ');}});return;}}return;}};}};},{}],293:[function(require,module,exports){/**\n * @fileoverview Enforce event handler naming conventions in JSX\n * @author Jake Marsh\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce event handler naming conventions in JSX',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{eventHandlerPrefix:{type:'string'},eventHandlerPropPrefix:{type:'string'}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();var configuration=context.options[0]||{};var eventHandlerPrefix=configuration.eventHandlerPrefix||'handle';var eventHandlerPropPrefix=configuration.eventHandlerPropPrefix||'on';var EVENT_HANDLER_REGEX=new RegExp('^((props\\\\.'+eventHandlerPropPrefix+')'+'|((.*\\\\.)?'+eventHandlerPrefix+'))[A-Z].*$');var PROP_EVENT_HANDLER_REGEX=new RegExp('^('+eventHandlerPropPrefix+'[A-Z].*|ref)$');return{JSXAttribute:function JSXAttribute(node){if(!node.value||!node.value.expression||!node.value.expression.object){return;}var propKey=(0,_typeof6.default)(node.name)==='object'?node.name.name:node.name;var propValue=sourceCode.getText(node.value.expression).replace(/^this\\.|.*::/,'');if(propKey==='ref'){return;}var propIsEventHandler=PROP_EVENT_HANDLER_REGEX.test(propKey);var propFnIsNamedCorrectly=EVENT_HANDLER_REGEX.test(propValue);if(propIsEventHandler&&!propFnIsNamedCorrectly){context.report({node:node,message:'Handler function for '+propKey+' prop key must begin with \\''+eventHandlerPrefix+'\\''});}else if(propFnIsNamedCorrectly&&!propIsEventHandler){context.report({node:node,message:'Prop key for '+propValue+' must begin with \\''+eventHandlerPropPrefix+'\\''});}}};}};},{}],294:[function(require,module,exports){/**\n * @fileoverview Validate props indentation in JSX\n * @author Yannick Croissant\n\n * This rule has been ported and modified from eslint and nodeca.\n * @author Vitaly Puzrin\n * @author Gyandeep Singh\n * @copyright 2015 Vitaly Puzrin. All rights reserved.\n * @copyright 2015 Gyandeep Singh. All rights reserved.\n Copyright (C) 2014 by Vitaly Puzrin\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 */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Validate props indentation in JSX',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{oneOf:[{enum:['tab']},{type:'integer'}]}]},create:function create(context){var MESSAGE='Expected indentation of {{needed}} {{type}} {{characters}} but found {{gotten}}.';var extraColumnStart=0;var indentType='space';var indentSize=4;var sourceCode=context.getSourceCode();if(context.options.length){if(context.options[0]==='tab'){indentSize=1;indentType='tab';}else if(typeof context.options[0]==='number'){indentSize=context.options[0];indentType='space';}}/**\n     * Reports a given indent violation and properly pluralizes the message\n     * @param {ASTNode} node Node violating the indent rule\n     * @param {Number} needed Expected indentation character count\n     * @param {Number} gotten Indentation character count in the actual node/code\n     * @param {Object=} loc Error line and column location\n     */function report(node,needed,gotten,loc){var msgContext={needed:needed,type:indentType,characters:needed===1?'character':'characters',gotten:gotten};if(loc){context.report({node:node,loc:loc,message:MESSAGE,data:msgContext});}else{context.report({node:node,message:MESSAGE,data:msgContext,fix:function fix(fixer){return fixer.replaceTextRange([node.start-node.loc.start.column,node.start],Array(needed+1).join(indentType==='space'?' ':'\\t'));}});}}/**\n     * Get node indent\n     * @param {ASTNode} node Node to examine\n     * @param {Boolean} byLastLine get indent of node's last line\n     * @param {Boolean} excludeCommas skip comma on start of line\n     * @return {Number} Indent\n     */function getNodeIndent(node,byLastLine,excludeCommas){byLastLine=byLastLine||false;excludeCommas=excludeCommas||false;var src=sourceCode.getText(node,node.loc.start.column+extraColumnStart);var lines=src.split('\\n');if(byLastLine){src=lines[lines.length-1];}else{src=lines[0];}var skip=excludeCommas?',':'';var regExp;if(indentType==='space'){regExp=new RegExp('^[ '+skip+']+');}else{regExp=new RegExp('^[\\t'+skip+']+');}var indent=regExp.exec(src);return indent?indent[0].length:0;}/**\n     * Checks node is the first in its own start line. By default it looks by start line.\n     * @param {ASTNode} node The node to check\n     * @param {Boolean} [byEndLocation] Lookup based on start position or end\n     * @return {Boolean} true if its the first in the its start line\n     */function isNodeFirstInLine(node,byEndLocation){var firstToken=byEndLocation===true?sourceCode.getLastToken(node,1):sourceCode.getTokenBefore(node);var startLine=byEndLocation===true?node.loc.end.line:node.loc.start.line;var endLine=firstToken?firstToken.loc.end.line:-1;return startLine!==endLine;}/**\n     * Check indent for nodes list\n     * @param {ASTNode[]} nodes list of node objects\n     * @param {Number} indent needed indent\n     * @param {Boolean} excludeCommas skip comma on start of line\n     */function checkNodesIndent(nodes,indent,excludeCommas){nodes.forEach(function(node){var nodeIndent=getNodeIndent(node,false,excludeCommas);if(node.type!=='ArrayExpression'&&node.type!=='ObjectExpression'&&nodeIndent!==indent&&isNodeFirstInLine(node)){report(node,indent,nodeIndent);}});}return{JSXOpeningElement:function JSXOpeningElement(node){var elementIndent=getNodeIndent(node);checkNodesIndent(node.attributes,elementIndent+indentSize);}};}};},{}],295:[function(require,module,exports){/**\n * @fileoverview Validate JSX indentation\n * @author Yannick Croissant\n\n * This rule has been ported and modified from eslint and nodeca.\n * @author Vitaly Puzrin\n * @author Gyandeep Singh\n * @copyright 2015 Vitaly Puzrin. All rights reserved.\n * @copyright 2015 Gyandeep Singh. All rights reserved.\n Copyright (C) 2014 by Vitaly Puzrin\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 */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Validate JSX indentation',category:'Stylistic Issues',recommended:false},fixable:'whitespace',schema:[{oneOf:[{enum:['tab']},{type:'integer'}]}]},create:function create(context){var MESSAGE='Expected indentation of {{needed}} {{type}} {{characters}} but found {{gotten}}.';var extraColumnStart=0;var indentType='space';var indentSize=4;var sourceCode=context.getSourceCode();if(context.options.length){if(context.options[0]==='tab'){indentSize=1;indentType='tab';}else if(typeof context.options[0]==='number'){indentSize=context.options[0];indentType='space';}}var indentChar=indentType==='space'?' ':'\\t';/**\n     * Responsible for fixing the indentation issue fix\n     * @param {ASTNode} node Node violating the indent rule\n     * @param {Number} needed Expected indentation character count\n     * @returns {Function} function to be executed by the fixer\n     * @private\n     */function getFixerFunction(node,needed){return function(fixer){var indent=Array(needed+1).join(indentChar);return fixer.replaceTextRange([node.start-node.loc.start.column,node.start],indent);};}/**\n     * Reports a given indent violation and properly pluralizes the message\n     * @param {ASTNode} node Node violating the indent rule\n     * @param {Number} needed Expected indentation character count\n     * @param {Number} gotten Indentation character count in the actual node/code\n     * @param {Object} loc Error line and column location\n     */function report(node,needed,gotten,loc){var msgContext={needed:needed,type:indentType,characters:needed===1?'character':'characters',gotten:gotten};if(loc){context.report({node:node,loc:loc,message:MESSAGE,data:msgContext,fix:getFixerFunction(node,needed)});}else{context.report({node:node,message:MESSAGE,data:msgContext,fix:getFixerFunction(node,needed)});}}/**\n     * Get node indent\n     * @param {ASTNode} node Node to examine\n     * @param {Boolean} byLastLine get indent of node's last line\n     * @param {Boolean} excludeCommas skip comma on start of line\n     * @return {Number} Indent\n     */function getNodeIndent(node,byLastLine,excludeCommas){byLastLine=byLastLine||false;excludeCommas=excludeCommas||false;var src=sourceCode.getText(node,node.loc.start.column+extraColumnStart);var lines=src.split('\\n');if(byLastLine){src=lines[lines.length-1];}else{src=lines[0];}var skip=excludeCommas?',':'';var regExp;if(indentType==='space'){regExp=new RegExp('^[ '+skip+']+');}else{regExp=new RegExp('^[\\t'+skip+']+');}var indent=regExp.exec(src);return indent?indent[0].length:0;}/**\n     * Checks node is the first in its own start line. By default it looks by start line.\n     * @param {ASTNode} node The node to check\n     * @return {Boolean} true if its the first in the its start line\n     */function isNodeFirstInLine(node){var token=node;do{token=sourceCode.getTokenBefore(token);}while(token.type==='JSXText'&&/^\\s*$/.test(token.value));var startLine=node.loc.start.line;var endLine=token?token.loc.end.line:-1;return startLine!==endLine;}/**\n   * Check if the node is the right member of a logical expression\n   * @param {ASTNode} node The node to check\n   * @return {Boolean} true if its the case, false if not\n   */function isRightInLogicalExp(node){return node.parent&&node.parent.parent&&node.parent.parent.type==='LogicalExpression'&&node.parent.parent.right===node.parent;}/**\n   * Check if the node is the alternate member of a conditional expression\n   * @param {ASTNode} node The node to check\n   * @return {Boolean} true if its the case, false if not\n   */function isAlternateInConditionalExp(node){return node.parent&&node.parent.parent&&node.parent.parent.type==='ConditionalExpression'&&node.parent.parent.alternate===node.parent&&sourceCode.getTokenBefore(node).value!=='(';}/**\n     * Check indent for nodes list\n     * @param {ASTNode} node The node to check\n     * @param {Number} indent needed indent\n     * @param {Boolean} excludeCommas skip comma on start of line\n     */function checkNodesIndent(node,indent,excludeCommas){var nodeIndent=getNodeIndent(node,false,excludeCommas);var isCorrectRightInLogicalExp=isRightInLogicalExp(node)&&nodeIndent-indent===indentSize;var isCorrectAlternateInCondExp=isAlternateInConditionalExp(node)&&nodeIndent-indent===0;if(nodeIndent!==indent&&isNodeFirstInLine(node)&&!isCorrectRightInLogicalExp&&!isCorrectAlternateInCondExp){report(node,indent,nodeIndent);}}return{JSXOpeningElement:function JSXOpeningElement(node){var prevToken=sourceCode.getTokenBefore(node);if(!prevToken){return;}// Use the parent in a list or an array\nif(prevToken.type==='JSXText'||prevToken.type==='Punctuator'&&prevToken.value===','){prevToken=sourceCode.getNodeByRangeIndex(prevToken.start);prevToken=prevToken.type==='Literal'?prevToken.parent:prevToken;// Use the first non-punctuator token in a conditional expression\n}else if(prevToken.type==='Punctuator'&&prevToken.value===':'){do{prevToken=sourceCode.getTokenBefore(prevToken);}while(prevToken.type==='Punctuator');prevToken=sourceCode.getNodeByRangeIndex(prevToken.start);while(prevToken.parent&&prevToken.parent.type!=='ConditionalExpression'){prevToken=prevToken.parent;}}prevToken=prevToken.type==='JSXExpressionContainer'?prevToken.expression:prevToken;var parentElementIndent=getNodeIndent(prevToken);var indent=prevToken.loc.start.line===node.loc.start.line||isRightInLogicalExp(node)||isAlternateInConditionalExp(node)?0:indentSize;checkNodesIndent(node,parentElementIndent+indent);},JSXClosingElement:function JSXClosingElement(node){if(!node.parent){return;}var peerElementIndent=getNodeIndent(node.parent.openingElement);checkNodesIndent(node,peerElementIndent);},JSXExpressionContainer:function JSXExpressionContainer(node){if(!node.parent){return;}var parentNodeIndent=getNodeIndent(node.parent);checkNodesIndent(node,parentNodeIndent+indentSize);}};}};},{}],296:[function(require,module,exports){/**\n * @fileoverview Report missing `key` props in iterators/collection literals.\n * @author Ben Mosher\n */'use strict';// var Components = require('../util/Components');\nvar hasProp=require(\"jsx-ast-utils/hasProp\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Report missing `key` props in iterators/collection literals',category:'Possible Errors',recommended:false},schema:[]},create:function create(context){function checkIteratorElement(node){if(node.type==='JSXElement'&&!hasProp(node.openingElement.attributes,'key')){context.report({node:node,message:'Missing \"key\" prop for element in iterator'});}}function getReturnStatement(body){return body.filter(function(item){return item.type==='ReturnStatement';})[0];}return{JSXElement:function JSXElement(node){if(hasProp(node.openingElement.attributes,'key')){return;}if(node.parent.type==='ArrayExpression'){context.report({node:node,message:'Missing \"key\" prop for element in array'});}},// Array.prototype.map\nCallExpression:function CallExpression(node){if(node.callee&&node.callee.type!=='MemberExpression'){return;}if(node.callee&&node.callee.property&&node.callee.property.name!=='map'){return;}var fn=node.arguments[0];var isFn=fn&&fn.type==='FunctionExpression';var isArrFn=fn&&fn.type==='ArrowFunctionExpression';if(isArrFn&&fn.body.type==='JSXElement'){checkIteratorElement(fn.body);}if(isFn||isArrFn){if(fn.body.type==='BlockStatement'){var returnStatement=getReturnStatement(fn.body.body);if(returnStatement&&returnStatement.argument){checkIteratorElement(returnStatement.argument);}}}}};}};},{\"jsx-ast-utils/hasProp\":389}],297:[function(require,module,exports){/**\n * @fileoverview Limit maximum of props on a single line in JSX\n * @author Yannick Croissant\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Limit maximum of props on a single line in JSX',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{maximum:{type:'integer',minimum:1},when:{type:'string',enum:['always','multiline']}}}]},create:function create(context){var sourceCode=context.getSourceCode();var configuration=context.options[0]||{};var maximum=configuration.maximum||1;var when=configuration.when||'always';function getPropName(propNode){if(propNode.type==='JSXSpreadAttribute'){return sourceCode.getText(propNode.argument);}return propNode.name.name;}return{JSXOpeningElement:function JSXOpeningElement(node){if(!node.attributes.length){return;}if(when==='multiline'&&node.loc.start.line===node.loc.end.line){return;}var firstProp=node.attributes[0];var linePartitionedProps=[[firstProp]];node.attributes.reduce(function(last,decl){if(last.loc.end.line===decl.loc.start.line){linePartitionedProps[linePartitionedProps.length-1].push(decl);}else{linePartitionedProps.push([decl]);}return decl;});linePartitionedProps.forEach(function(propsInLine){if(propsInLine.length>maximum){var name=getPropName(propsInLine[maximum]);context.report({node:propsInLine[maximum],message:'Prop `'+name+'` must be placed on a new line'});}});}};}};},{}],298:[function(require,module,exports){/**\n * @fileoverview Prevents usage of Function.prototype.bind and arrow functions\n *               in React component definition.\n * @author Daniel Lo Nigro <dan.cx>\n */'use strict';var Components=require(\"../util/Components\");var propName=require(\"jsx-ast-utils/propName\");// -----------------------------------------------------------------------------\n// Rule Definition\n// -----------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevents usage of Function.prototype.bind and arrow functions in React component definition',category:'Best Practices',recommended:false},schema:[{type:'object',properties:{allowArrowFunctions:{default:false,type:'boolean'},allowBind:{default:false,type:'boolean'},ignoreRefs:{default:false,type:'boolean'}},additionalProperties:false}]},create:Components.detect(function(context,components,utils){var configuration=context.options[0]||{};return{CallExpression:function CallExpression(node){var callee=node.callee;if(!configuration.allowBind&&(callee.type!=='MemberExpression'||callee.property.name!=='bind')){return;}var ancestors=context.getAncestors(callee).reverse();for(var i=0,j=ancestors.length;i<j;i++){if(!configuration.allowBind&&ancestors[i].type==='MethodDefinition'&&ancestors[i].key.name==='render'||ancestors[i].type==='Property'&&ancestors[i].key.name==='render'){if(utils.isReturningJSX(ancestors[i])){context.report({node:callee,message:'JSX props should not use .bind()'});}break;}}},JSXAttribute:function JSXAttribute(node){var isRef=configuration.ignoreRefs&&propName(node)==='ref';if(isRef||!node.value||!node.value.expression){return;}var valueNode=node.value.expression;if(!configuration.allowBind&&valueNode.type==='CallExpression'&&valueNode.callee.type==='MemberExpression'&&valueNode.callee.property.name==='bind'){context.report({node:node,message:'JSX props should not use .bind()'});}else if(!configuration.allowArrowFunctions&&valueNode.type==='ArrowFunctionExpression'){context.report({node:node,message:'JSX props should not use arrow functions'});}else if(!configuration.allowBind&&valueNode.type==='BindExpression'){context.report({node:node,message:'JSX props should not use ::'});}}};})};},{\"../util/Components\":343,\"jsx-ast-utils/propName\":416}],299:[function(require,module,exports){/**\n * @fileoverview Comments inside children section of tag should be placed inside braces.\n * @author Ben Vinegar\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Comments inside children section of tag should be placed inside braces',category:'Possible Errors',recommended:false},schema:[{type:'object',properties:{},additionalProperties:false}]},create:function create(context){function reportLiteralNode(node){context.report(node,'Comments inside children section of tag should be placed inside braces');}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{Literal:function Literal(node){if(/^\\s*\\/(\\/|\\*)/m.test(node.value)){// inside component, e.g. <div>literal</div>\nif(node.parent.type!=='JSXAttribute'&&node.parent.type!=='JSXExpressionContainer'&&node.parent.type.indexOf('JSX')!==-1){reportLiteralNode(node);}}}};}};},{}],300:[function(require,module,exports){/**\n * @fileoverview Enforce no duplicate props\n * @author Markus Ånöstam\n */'use strict';var has=require(\"has\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce no duplicate props',category:'Possible Errors',recommended:true},schema:[{type:'object',properties:{ignoreCase:{type:'boolean'}},additionalProperties:false}]},create:function create(context){var configuration=context.options[0]||{};var ignoreCase=configuration.ignoreCase||false;return{JSXOpeningElement:function JSXOpeningElement(node){var props={};node.attributes.forEach(function(decl){if(decl.type==='JSXSpreadAttribute'){return;}var name=decl.name.name;if(ignoreCase){name=name.toLowerCase();}if(has(props,name)){context.report({node:decl,message:'No duplicate props allowed'});}else{props[name]=1;}});}};}};},{\"has\":376}],301:[function(require,module,exports){/**\n * @fileoverview Prevent using string literals in React component definition\n * @author Caleb Morris\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent using string literals in React component definition',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{},additionalProperties:false}]},create:function create(context){function reportLiteralNode(node){context.report({node:node,message:'Missing JSX expression container around literal string'});}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{Literal:function Literal(node){if(!/^[\\s]+$/.test(node.value)&&node.parent&&node.parent.type!=='JSXExpressionContainer'&&node.parent.type!=='JSXAttribute'&&node.parent.type.indexOf('JSX')!==-1){reportLiteralNode(node);}}};}};},{}],302:[function(require,module,exports){/**\n * @fileoverview Forbid target='_blank' attribute\n * @author Kevin Miller\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Forbid target=\"_blank\" attribute without rel=\"noopener noreferrer\"',category:'Best Practices',recommended:false},schema:[]},create:function create(context){return{JSXAttribute:function JSXAttribute(node){if(node.parent.name.name!=='a'){return;}if(node.name.name==='target'&&node.value.type==='Literal'&&node.value.value.toLowerCase()==='_blank'){var relFound=false;var attrs=node.parent.attributes;for(var idx in attrs){if(attrs[idx].name&&attrs[idx].name.name==='rel'){var tags=attrs[idx].value.type==='Literal'&&attrs[idx].value.value.toLowerCase().split(' ');if(!tags||tags.indexOf('noopener')>=0&&tags.indexOf('noreferrer')>=0){relFound=true;break;}}}if(!relFound){context.report(node,'Using target=\"_blank\" without rel=\"noopener noreferrer\" '+'is a security risk: see https://mathiasbynens.github.io/rel-noopener');}}}};}};},{}],303:[function(require,module,exports){/**\n * @fileoverview Disallow undeclared variables in JSX\n * @author Yannick Croissant\n */'use strict';/**\n * Checks if a node name match the JSX tag convention.\n * @param {String} name - Name of the node to check.\n * @returns {boolean} Whether or not the node name match the JSX tag convention.\n */var tagConvention=/^[a-z]|\\-/;function isTagName(name){return tagConvention.test(name);}// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Disallow undeclared variables in JSX',category:'Possible Errors',recommended:true},schema:[]},create:function create(context){/**\n     * Compare an identifier with the variables declared in the scope\n     * @param {ASTNode} node - Identifier or JSXIdentifier node\n     * @returns {void}\n     */function checkIdentifierInJSX(node){var scope=context.getScope();var variables=scope.variables;var i;var len;// Ignore 'this' keyword (also maked as JSXIdentifier when used in JSX)\nif(node.name==='this'){return;}while(scope.type!=='global'){scope=scope.upper;variables=scope.variables.concat(variables);}if(scope.childScopes.length){variables=scope.childScopes[0].variables.concat(variables);// Temporary fix for babel-eslint\nif(scope.childScopes[0].childScopes.length){variables=scope.childScopes[0].childScopes[0].variables.concat(variables);}}for(i=0,len=variables.length;i<len;i++){if(variables[i].name===node.name){return;}}context.report({node:node,message:'\\''+node.name+'\\' is not defined.'});}return{JSXOpeningElement:function JSXOpeningElement(node){switch(node.name.type){case'JSXIdentifier':node=node.name;if(isTagName(node.name)){return;}break;case'JSXMemberExpression':node=node.name;do{node=node.object;}while(node&&node.type!=='JSXIdentifier');break;case'JSXNamespacedName':node=node.name.namespace;break;default:break;}checkIdentifierInJSX(node);}};}};},{}],304:[function(require,module,exports){/**\n * @fileoverview Enforce PascalCase for user-defined JSX components\n * @author Jake Marsh\n */'use strict';var elementType=require(\"jsx-ast-utils/elementType\");// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar PASCAL_CASE_REGEX=/^([A-Z0-9]|[A-Z0-9]+[a-z0-9]+(?:[A-Z0-9]+[a-z0-9]*)*)$/;var COMPAT_TAG_REGEX=/^[a-z]|\\-/;var ALL_CAPS_TAG_REGEX=/^[A-Z0-9]+$/;// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce PascalCase for user-defined JSX components',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{allowAllCaps:{type:'boolean'},ignore:{type:'array'}},additionalProperties:false}]},create:function create(context){var configuration=context.options[0]||{};var allowAllCaps=configuration.allowAllCaps||false;var ignore=configuration.ignore||[];return{JSXOpeningElement:function JSXOpeningElement(node){var name=elementType(node);// Get namespace if the type is JSXNamespacedName or JSXMemberExpression\nif(name.indexOf(':')>-1){name=name.substring(0,name.indexOf(':'));}else if(name.indexOf('.')>-1){name=name.substring(0,name.indexOf('.'));}var isPascalCase=PASCAL_CASE_REGEX.test(name);var isCompatTag=COMPAT_TAG_REGEX.test(name);var isAllowedAllCaps=allowAllCaps&&ALL_CAPS_TAG_REGEX.test(name);var isIgnored=ignore.indexOf(name)!==-1;if(!isPascalCase&&!isCompatTag&&!isAllowedAllCaps&&!isIgnored){context.report({node:node,message:'Imported JSX component '+name+' must be in PascalCase'});}}};}};},{\"jsx-ast-utils/elementType\":388}],305:[function(require,module,exports){/**\n * @fileoverview Enforce props alphabetical sorting\n * @author Ilya Volodin, Yannick Croissant\n */'use strict';var propName=require(\"jsx-ast-utils/propName\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nfunction isCallbackPropName(name){return /^on[A-Z]/.test(name);}module.exports={meta:{docs:{description:'Enforce props alphabetical sorting',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{// Whether callbacks (prefixed with \"on\") should be listed at the very end,\n// after all other props. Supersedes shorthandLast.\ncallbacksLast:{type:'boolean'},// Whether shorthand properties (without a value) should be listed first\nshorthandFirst:{type:'boolean'},// Whether shorthand properties (without a value) should be listed last\nshorthandLast:{type:'boolean'},ignoreCase:{type:'boolean'},// Whether alphabetical sorting should be enforced\nnoSortAlphabetically:{type:'boolean'}},additionalProperties:false}]},create:function create(context){var configuration=context.options[0]||{};var ignoreCase=configuration.ignoreCase||false;var callbacksLast=configuration.callbacksLast||false;var shorthandFirst=configuration.shorthandFirst||false;var shorthandLast=configuration.shorthandLast||false;var noSortAlphabetically=configuration.noSortAlphabetically||false;return{JSXOpeningElement:function JSXOpeningElement(node){node.attributes.reduce(function(memo,decl,idx,attrs){if(decl.type==='JSXSpreadAttribute'){return attrs[idx+1];}var previousPropName=propName(memo);var currentPropName=propName(decl);var previousValue=memo.value;var currentValue=decl.value;var previousIsCallback=isCallbackPropName(previousPropName);var currentIsCallback=isCallbackPropName(currentPropName);if(ignoreCase){previousPropName=previousPropName.toLowerCase();currentPropName=currentPropName.toLowerCase();}if(callbacksLast){if(!previousIsCallback&&currentIsCallback){// Entering the callback prop section\nreturn decl;}if(previousIsCallback&&!currentIsCallback){// Encountered a non-callback prop after a callback prop\ncontext.report({node:memo,message:'Callbacks must be listed after all other props'});return memo;}}if(shorthandFirst){if(currentValue&&!previousValue){return decl;}if(!currentValue&&previousValue){context.report({node:memo,message:'Shorthand props must be listed before all other props'});return memo;}}if(shorthandLast){if(!currentValue&&previousValue){return decl;}if(currentValue&&!previousValue){context.report({node:memo,message:'Shorthand props must be listed after all other props'});return memo;}}if(!noSortAlphabetically&&currentPropName<previousPropName){context.report({node:decl,message:'Props should be sorted alphabetically'});return memo;}return decl;},node.attributes[0]);}};}};},{\"jsx-ast-utils/propName\":416}],306:[function(require,module,exports){/**\n * @fileoverview Validate spacing before closing bracket in JSX.\n * @author ryym\n */'use strict';var getTokenBeforeClosingBracket=require(\"../util/getTokenBeforeClosingBracket\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Validate spacing before closing bracket in JSX',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{enum:['always','never']}]},create:function create(context){var configuration=context.options[0]||'always';var sourceCode=context.getSourceCode();var NEVER_MESSAGE='A space is forbidden before closing bracket';var ALWAYS_MESSAGE='A space is required before closing bracket';// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{JSXOpeningElement:function JSXOpeningElement(node){if(!node.selfClosing){return;}var leftToken=getTokenBeforeClosingBracket(node);var closingSlash=sourceCode.getTokenAfter(leftToken);if(leftToken.loc.end.line!==closingSlash.loc.start.line){return;}if(configuration==='always'&&!sourceCode.isSpaceBetweenTokens(leftToken,closingSlash)){context.report({loc:closingSlash.loc.start,message:ALWAYS_MESSAGE,fix:function fix(fixer){return fixer.insertTextBefore(closingSlash,' ');}});}else if(configuration==='never'&&sourceCode.isSpaceBetweenTokens(leftToken,closingSlash)){context.report({loc:closingSlash.loc.start,message:NEVER_MESSAGE,fix:function fix(fixer){var previousToken=sourceCode.getTokenBefore(closingSlash);return fixer.removeRange([previousToken.range[1],closingSlash.range[0]]);}});}}};}};},{\"../util/getTokenBeforeClosingBracket\":345}],307:[function(require,module,exports){/**\n * @fileoverview Validates whitespace in and around the JSX opening and closing brackets\n * @author Diogo Franco (Kovensky)\n */'use strict';var has=require(\"has\");var getTokenBeforeClosingBracket=require(\"../util/getTokenBeforeClosingBracket\");// ------------------------------------------------------------------------------\n// Validators\n// ------------------------------------------------------------------------------\nfunction validateClosingSlash(context,node,option){var sourceCode=context.getSourceCode();var SELF_CLOSING_NEVER_MESSAGE='Whitespace is forbidden between `/` and `>`; write `/>`';var SELF_CLOSING_ALWAYS_MESSAGE='Whitespace is required between `/` and `>`; write `/ >`';var NEVER_MESSAGE='Whitespace is forbidden between `<` and `/`; write `</`';var ALWAYS_MESSAGE='Whitespace is required between `<` and `/`; write `< /`';var adjacent;if(node.selfClosing){var lastTokens=sourceCode.getLastTokens(node,2);adjacent=!sourceCode.isSpaceBetweenTokens(lastTokens[0],lastTokens[1]);if(option==='never'){if(!adjacent){context.report({node:node,loc:{start:lastTokens[0].loc.start,end:lastTokens[1].loc.end},message:SELF_CLOSING_NEVER_MESSAGE,fix:function fix(fixer){return fixer.removeRange([lastTokens[0].range[1],lastTokens[1].range[0]]);}});}}else if(option==='always'&&adjacent){context.report({node:node,loc:{start:lastTokens[0].loc.start,end:lastTokens[1].loc.end},message:SELF_CLOSING_ALWAYS_MESSAGE,fix:function fix(fixer){return fixer.insertTextBefore(lastTokens[1],' ');}});}}else{var firstTokens=sourceCode.getFirstTokens(node,2);adjacent=!sourceCode.isSpaceBetweenTokens(firstTokens[0],firstTokens[1]);if(option==='never'){if(!adjacent){context.report({node:node,loc:{start:firstTokens[0].loc.start,end:firstTokens[1].loc.end},message:NEVER_MESSAGE,fix:function fix(fixer){return fixer.removeRange([firstTokens[0].range[1],firstTokens[1].range[0]]);}});}}else if(option==='always'&&adjacent){context.report({node:node,loc:{start:firstTokens[0].loc.start,end:firstTokens[1].loc.end},message:ALWAYS_MESSAGE,fix:function fix(fixer){return fixer.insertTextBefore(firstTokens[1],' ');}});}}}function validateBeforeSelfClosing(context,node,option){var sourceCode=context.getSourceCode();var NEVER_MESSAGE='A space is forbidden before closing bracket';var ALWAYS_MESSAGE='A space is required before closing bracket';var leftToken=getTokenBeforeClosingBracket(node);var closingSlash=sourceCode.getTokenAfter(leftToken);if(leftToken.loc.end.line!==closingSlash.loc.start.line){return;}if(option==='always'&&!sourceCode.isSpaceBetweenTokens(leftToken,closingSlash)){context.report({node:node,loc:closingSlash.loc.start,message:ALWAYS_MESSAGE,fix:function fix(fixer){return fixer.insertTextBefore(closingSlash,' ');}});}else if(option==='never'&&sourceCode.isSpaceBetweenTokens(leftToken,closingSlash)){context.report({node:node,loc:closingSlash.loc.start,message:NEVER_MESSAGE,fix:function fix(fixer){var previousToken=sourceCode.getTokenBefore(closingSlash);return fixer.removeRange([previousToken.range[1],closingSlash.range[0]]);}});}}function validateAfterOpening(context,node,option){var sourceCode=context.getSourceCode();var NEVER_MESSAGE='A space is forbidden after opening bracket';var ALWAYS_MESSAGE='A space is required after opening bracket';var openingToken=sourceCode.getTokenBefore(node.name);if(option==='allow-multiline'){if(openingToken.loc.start.line!==node.name.loc.start.line){return;}}var adjacent=!sourceCode.isSpaceBetweenTokens(openingToken,node.name);if(option==='never'||option==='allow-multiline'){if(!adjacent){context.report({node:node,loc:{start:openingToken.loc.start,end:node.name.loc.start},message:NEVER_MESSAGE,fix:function fix(fixer){return fixer.removeRange([openingToken.range[1],node.name.range[0]]);}});}}else if(option==='always'&&adjacent){context.report({node:node,loc:{start:openingToken.loc.start,end:node.name.loc.start},message:ALWAYS_MESSAGE,fix:function fix(fixer){return fixer.insertTextBefore(node.name,' ');}});}}// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{},fixable:'whitespace',schema:[{type:'object',properties:{closingSlash:{enum:['always','never','allow']},beforeSelfClosing:{enum:['always','never','allow']},afterOpening:{enum:['always','allow-multiline','never','allow']}},default:{closingSlash:'never',beforeSelfClosing:'always',afterOpening:'never'},additionalProperties:false}]},create:function create(context){var options={closingSlash:'never',beforeSelfClosing:'always',afterOpening:'never'};for(var key in options){if(has(options,key)&&has(context.options[0]||{},key)){options[key]=context.options[0][key];}}return{JSXOpeningElement:function JSXOpeningElement(node){if(options.closingSlash!=='allow'&&node.selfClosing){validateClosingSlash(context,node,options.closingSlash);}if(options.afterOpening!=='allow'){validateAfterOpening(context,node,options.afterOpening);}if(options.beforeSelfClosing!=='allow'&&node.selfClosing){validateBeforeSelfClosing(context,node,options.beforeSelfClosing);}},JSXClosingElement:function JSXClosingElement(node){if(options.afterOpening!=='allow'){validateAfterOpening(context,node,options.afterOpening);}if(options.closingSlash!=='allow'){validateClosingSlash(context,node,options.closingSlash);}}};}};},{\"../util/getTokenBeforeClosingBracket\":345,\"has\":376}],308:[function(require,module,exports){/**\n * @fileoverview Prevent React to be marked as unused\n * @author Glen Mailer\n */'use strict';var pragmaUtil=require(\"../util/pragma\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent React to be marked as unused',category:'Best Practices',recommended:true},schema:[]},create:function create(context){var pragma=pragmaUtil.getFromContext(context);// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{JSXOpeningElement:function JSXOpeningElement(){context.markVariableAsUsed(pragma);},BlockComment:function BlockComment(node){pragma=pragmaUtil.getFromNode(node)||pragma;}};}};},{\"../util/pragma\":346}],309:[function(require,module,exports){/**\n * @fileoverview Prevent variables used in JSX to be marked as unused\n * @author Yannick Croissant\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent variables used in JSX to be marked as unused',category:'Best Practices',recommended:true},schema:[]},create:function create(context){return{JSXOpeningElement:function JSXOpeningElement(node){var name;if(node.name.namespace&&node.name.namespace.name){// <Foo:Bar>\nname=node.name.namespace.name;}else if(node.name.name){// <Foo>\nname=node.name.name;}else if(node.name.object){// <Foo...Bar>\nvar parent=node.name.object;while(parent.object){parent=parent.object;}name=parent.name;}else{return;}context.markVariableAsUsed(name);}};}};},{}],310:[function(require,module,exports){/**\n * @fileoverview Prevent missing parentheses around multilines JSX\n * @author Yannick Croissant\n */'use strict';var has=require(\"has\");// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DEFAULTS={declaration:true,assignment:true,return:true};// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent missing parentheses around multilines JSX',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{type:'object',properties:{declaration:{type:'boolean'},assignment:{type:'boolean'},return:{type:'boolean'}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();function isParenthesised(node){var previousToken=sourceCode.getTokenBefore(node);var nextToken=sourceCode.getTokenAfter(node);return previousToken&&nextToken&&previousToken.value==='('&&previousToken.range[1]<=node.range[0]&&nextToken.value===')'&&nextToken.range[0]>=node.range[1];}function isMultilines(node){return node.loc.start.line!==node.loc.end.line;}function check(node){if(!node||node.type!=='JSXElement'){return;}if(!isParenthesised(node)&&isMultilines(node)){context.report({node:node,message:'Missing parentheses around multilines JSX',fix:function fix(fixer){return fixer.replaceText(node,'('+sourceCode.getText(node)+')');}});}}function isEnabled(type){var userOptions=context.options[0]||{};if(has(userOptions,type)){return userOptions[type];}return DEFAULTS[type];}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{VariableDeclarator:function VariableDeclarator(node){if(!isEnabled('declaration')){return;}if(node.init&&node.init.type==='ConditionalExpression'){check(node.init.consequent);check(node.init.alternate);return;}check(node.init);},AssignmentExpression:function AssignmentExpression(node){if(!isEnabled('assignment')){return;}if(node.right.type==='ConditionalExpression'){check(node.right.consequent);check(node.right.alternate);return;}check(node.right);},ReturnStatement:function ReturnStatement(node){if(isEnabled('return')){check(node.argument);}}};}};},{\"has\":376}],311:[function(require,module,exports){/**\n * @fileoverview Prevent usage of Array index in keys\n * @author Joe Lencioni\n */'use strict';var has=require(\"has\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of Array index in keys',category:'Best Practices',recommended:false},schema:[]},create:function create(context){// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nvar indexParamNames=[];var iteratorFunctionsToIndexParamPosition={every:1,filter:1,find:1,findIndex:1,forEach:1,map:1,reduce:2,reduceRight:2,some:1};var ERROR_MESSAGE='Do not use Array index in keys';function isArrayIndex(node){return node.type==='Identifier'&&indexParamNames.indexOf(node.name)!==-1;}function getMapIndexParamName(node){var callee=node.callee;if(callee.type!=='MemberExpression'){return null;}if(callee.property.type!=='Identifier'){return null;}if(!has(iteratorFunctionsToIndexParamPosition,callee.property.name)){return null;}var firstArg=node.arguments[0];if(!firstArg){return null;}var isFunction=['ArrowFunctionExpression','FunctionExpression'].indexOf(firstArg.type)!==-1;if(!isFunction){return null;}var params=firstArg.params;var indexParamPosition=iteratorFunctionsToIndexParamPosition[callee.property.name];if(params.length<indexParamPosition+1){return null;}return params[indexParamPosition].name;}function getIdentifiersFromBinaryExpression(side){if(side.type==='Identifier'){return side;}if(side.type==='BinaryExpression'){// recurse\nvar left=getIdentifiersFromBinaryExpression(side.left);var right=getIdentifiersFromBinaryExpression(side.right);return[].concat(left,right).filter(Boolean);}return null;}function checkPropValue(node){if(isArrayIndex(node)){// key={bar}\ncontext.report({node:node,message:ERROR_MESSAGE});return;}if(node.type==='TemplateLiteral'){// key={`foo-${bar}`}\nnode.expressions.filter(isArrayIndex).forEach(function(){context.report({node:node,message:ERROR_MESSAGE});});return;}if(node.type==='BinaryExpression'){// key={'foo' + bar}\nvar identifiers=getIdentifiersFromBinaryExpression(node);identifiers.filter(isArrayIndex).forEach(function(){context.report({node:node,message:ERROR_MESSAGE});});return;}}return{CallExpression:function CallExpression(node){if(node.callee&&node.callee.type==='MemberExpression'&&['createElement','cloneElement'].indexOf(node.callee.property.name)!==-1&&node.arguments.length>1){// React.createElement\nif(!indexParamNames.length){return;}var props=node.arguments[1];if(props.type!=='ObjectExpression'){return;}props.properties.forEach(function(prop){if(!prop.key||prop.key.name!=='key'){// { ...foo }\n// { foo: bar }\nreturn;}checkPropValue(prop.value);});return;}var mapIndexParamName=getMapIndexParamName(node);if(!mapIndexParamName){return;}indexParamNames.push(mapIndexParamName);},JSXAttribute:function JSXAttribute(node){if(node.name.name!=='key'){// foo={bar}\nreturn;}if(!indexParamNames.length){// Not inside a call expression that we think has an index param.\nreturn;}var value=node.value;if(value.type!=='JSXExpressionContainer'){// key='foo'\nreturn;}checkPropValue(value.expression);},'CallExpression:exit':function CallExpressionExit(node){var mapIndexParamName=getMapIndexParamName(node);if(!mapIndexParamName){return;}indexParamNames.pop();}};}};},{\"has\":376}],312:[function(require,module,exports){/**\n * @fileoverview Prevent passing of children as props\n * @author Benjamin Stepp\n */'use strict';var find=require(\"array.prototype.find\");// ------------------------------------------------------------------------------\n// Helpers\n// ------------------------------------------------------------------------------\n/**\n * Checks if the node is a createElement call with a props literal.\n * @param {ASTNode} node - The AST node being checked.\n * @returns {Boolean} - True if node is a createElement call with a props\n * object literal, False if not.\n*/function isCreateElementWithProps(node){return node.callee&&node.callee.type==='MemberExpression'&&node.callee.property.name==='createElement'&&node.arguments.length>1&&node.arguments[1].type==='ObjectExpression';}// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent passing of children as props.',category:'Best Practices',recommended:false},schema:[]},create:function create(context){return{JSXAttribute:function JSXAttribute(node){if(node.name.name!=='children'){return;}context.report({node:node,message:'Do not pass children as props. Instead, nest children between the opening and closing tags.'});},CallExpression:function CallExpression(node){if(!isCreateElementWithProps(node)){return;}var props=node.arguments[1].properties;var childrenProp=find(props,function(prop){return prop.key&&prop.key.name==='children';});if(childrenProp){context.report({node:node,message:'Do not pass children as props. Instead, pass them as additional arguments to React.createElement.'});}}};}};},{\"array.prototype.find\":8}],313:[function(require,module,exports){(function(process){/**\n * @fileoverview Comments inside children section of tag should be placed inside braces.\n * @author Ben Vinegar\n * @deprecated\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nvar util=require(\"util\");var jsxNoCommentTextnodes=require(\"./jsx-no-comment-textnodes\");var isWarnedForDeprecation=false;module.exports={meta:{deprecated:true,docs:{description:'Comments inside children section of tag should be placed inside braces',category:'Possible Errors',recommended:false},schema:[{type:'object',properties:{},additionalProperties:false}]},create:function create(context){return util._extend(jsxNoCommentTextnodes.create(context),{Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The react/no-comment-textnodes rule is deprecated. Please '+'use the react/jsx-no-comment-textnodes rule instead.');/* eslint-enable no-console */isWarnedForDeprecation=true;}});}};}).call(this,require(\"_process\"));},{\"./jsx-no-comment-textnodes\":299,\"_process\":594,\"util\":602}],314:[function(require,module,exports){/**\n * @fileoverview Report when a DOM element is using both children and dangerouslySetInnerHTML\n * @author David Petersen\n */'use strict';var find=require(\"array.prototype.find\");var variableUtil=require(\"../util/variable\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Report when a DOM element is using both children and dangerouslySetInnerHTML',category:'',recommended:false},schema:[]// no options\n},create:function create(context){function findSpreadVariable(name){return find(variableUtil.variablesInScope(context),function(item){return item.name===name;});}/**\n     * Takes a ObjectExpression and returns the value of the prop if it has it\n     * @param {object} node - ObjectExpression node\n     * @param {string} propName - name of the prop to look for\n     */function findObjectProp(node,propName){if(!node.properties){return false;}return find(node.properties,function(prop){if(prop.type==='Property'){return prop.key.name===propName;}else if(prop.type==='ExperimentalSpreadProperty'){var variable=findSpreadVariable(prop.argument.name);if(variable&&variable.defs[0].node.init){return findObjectProp(variable.defs[0].node.init,propName);}}return false;});}/**\n     * Takes a JSXElement and returns the value of the prop if it has it\n     * @param {object} node - JSXElement node\n     * @param {string} propName - name of the prop to look for\n     */function findJsxProp(node,propName){var attributes=node.openingElement.attributes;return find(attributes,function(attribute){if(attribute.type==='JSXSpreadAttribute'){var variable=findSpreadVariable(attribute.argument.name);if(variable&&variable.defs.length&&variable.defs[0].node.init){return findObjectProp(variable.defs[0].node.init,propName);}}return attribute.name&&attribute.name.name===propName;});}return{JSXElement:function JSXElement(node){var hasChildren=false;if(node.children.length){hasChildren=true;}else if(findJsxProp(node,'children')){hasChildren=true;}if(node.openingElement.attributes&&hasChildren&&findJsxProp(node,'dangerouslySetInnerHTML')){context.report(node,'Only set one of `children` or `props.dangerouslySetInnerHTML`');}},CallExpression:function CallExpression(node){if(node.callee&&node.callee.type==='MemberExpression'&&node.callee.property.name==='createElement'&&node.arguments.length>1){var hasChildren=false;var props=node.arguments[1];if(props.type==='Identifier'){var variable=find(variableUtil.variablesInScope(context),function(item){return item.name===props.name;});if(variable&&variable.defs[0].node.init){props=variable.defs[0].node.init;}}var dangerously=findObjectProp(props,'dangerouslySetInnerHTML');if(node.arguments.length===2){if(findObjectProp(props,'children')){hasChildren=true;}}else{hasChildren=true;}if(dangerously&&hasChildren){context.report(node,'Only set one of `children` or `props.dangerouslySetInnerHTML`');}}}};}};},{\"../util/variable\":347,\"array.prototype.find\":8}],315:[function(require,module,exports){/**\n * @fileoverview Prevent usage of dangerous JSX props\n * @author Scott Andrews\n */'use strict';// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DANGEROUS_MESSAGE='Dangerous property \\'{{name}}\\' found';var DANGEROUS_PROPERTY_NAMES=['dangerouslySetInnerHTML'];var DANGEROUS_PROPERTIES=DANGEROUS_PROPERTY_NAMES.reduce(function(props,prop){props[prop]=prop;return props;},(0,_create4.default)(null));// ------------------------------------------------------------------------------\n// Helpers\n// ------------------------------------------------------------------------------\n/**\n * Checks if a node name match the JSX tag convention.\n * @param {String} name - Name of the node to check.\n * @returns {boolean} Whether or not the node name match the JSX tag convention.\n */var tagConvention=/^[a-z]|\\-/;function isTagName(name){return tagConvention.test(name);}/**\n * Checks if a JSX attribute is dangerous.\n * @param {String} name - Name of the attribute to check.\n * @returns {boolean} Whether or not the attribute is dnagerous.\n */function isDangerous(name){return name in DANGEROUS_PROPERTIES;}// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of dangerous JSX props',category:'Best Practices',recommended:false},schema:[]},create:function create(context){return{JSXAttribute:function JSXAttribute(node){if(isTagName(node.parent.name.name)&&isDangerous(node.name.name)){context.report({node:node,message:DANGEROUS_MESSAGE,data:{name:node.name.name}});}}};}};},{}],316:[function(require,module,exports){/**\n * @fileoverview Prevent usage of deprecated methods\n * @author Yannick Croissant\n * @author Scott Feeney\n */'use strict';var pragmaUtil=require(\"../util/pragma\");var versionUtil=require(\"../util/version\");// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DEPRECATED_MESSAGE='{{oldMethod}} is deprecated since React {{version}}{{newMethod}}';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of deprecated methods',category:'Best Practices',recommended:true},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();var pragma=pragmaUtil.getFromContext(context);function getDeprecated(){var deprecated={MemberExpression:{}};// 0.12.0\ndeprecated.MemberExpression[pragma+'.renderComponent']=['0.12.0',pragma+'.render'];deprecated.MemberExpression[pragma+'.renderComponentToString']=['0.12.0',pragma+'.renderToString'];deprecated.MemberExpression[pragma+'.renderComponentToStaticMarkup']=['0.12.0',pragma+'.renderToStaticMarkup'];deprecated.MemberExpression[pragma+'.isValidComponent']=['0.12.0',pragma+'.isValidElement'];deprecated.MemberExpression[pragma+'.PropTypes.component']=['0.12.0',pragma+'.PropTypes.element'];deprecated.MemberExpression[pragma+'.PropTypes.renderable']=['0.12.0',pragma+'.PropTypes.node'];deprecated.MemberExpression[pragma+'.isValidClass']=['0.12.0'];deprecated.MemberExpression['this.transferPropsTo']=['0.12.0','spread operator ({...})'];// 0.13.0\ndeprecated.MemberExpression[pragma+'.addons.classSet']=['0.13.0','the npm module classnames'];deprecated.MemberExpression[pragma+'.addons.cloneWithProps']=['0.13.0',pragma+'.cloneElement'];// 0.14.0\ndeprecated.MemberExpression[pragma+'.render']=['0.14.0','ReactDOM.render'];deprecated.MemberExpression[pragma+'.unmountComponentAtNode']=['0.14.0','ReactDOM.unmountComponentAtNode'];deprecated.MemberExpression[pragma+'.findDOMNode']=['0.14.0','ReactDOM.findDOMNode'];deprecated.MemberExpression[pragma+'.renderToString']=['0.14.0','ReactDOMServer.renderToString'];deprecated.MemberExpression[pragma+'.renderToStaticMarkup']=['0.14.0','ReactDOMServer.renderToStaticMarkup'];// 15.0.0\ndeprecated.MemberExpression[pragma+'.addons.LinkedStateMixin']=['15.0.0'];deprecated.MemberExpression['ReactPerf.printDOM']=['15.0.0','ReactPerf.printOperations'];deprecated.MemberExpression['Perf.printDOM']=['15.0.0','Perf.printOperations'];deprecated.MemberExpression['ReactPerf.getMeasurementsSummaryMap']=['15.0.0','ReactPerf.getWasted'];deprecated.MemberExpression['Perf.getMeasurementsSummaryMap']=['15.0.0','Perf.getWasted'];return deprecated;}function isDeprecated(type,method){var deprecated=getDeprecated();return deprecated[type]&&deprecated[type][method]&&versionUtil.test(context,deprecated[type][method][0]);}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{MemberExpression:function MemberExpression(node){var method=sourceCode.getText(node);if(!isDeprecated(node.type,method)){return;}var deprecated=getDeprecated();context.report({node:node,message:DEPRECATED_MESSAGE,data:{oldMethod:method,version:deprecated[node.type][method][0],newMethod:deprecated[node.type][method][1]?', use '+deprecated[node.type][method][1]+' instead':''}});},BlockComment:function BlockComment(node){pragma=pragmaUtil.getFromNode(node)||pragma;}};}};},{\"../util/pragma\":346,\"../util/version\":348}],317:[function(require,module,exports){/**\n * @fileoverview Prevent usage of setState in componentDidMount\n * @author Yannick Croissant\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of setState in componentDidMount',category:'Best Practices',recommended:false},schema:[{enum:['disallow-in-func']}]},create:function create(context){var mode=context.options[0]||'allow-in-func';// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){var callee=node.callee;if(callee.type!=='MemberExpression'||callee.object.type!=='ThisExpression'||callee.property.name!=='setState'){return;}var ancestors=context.getAncestors(callee).reverse();var depth=0;for(var i=0,j=ancestors.length;i<j;i++){if(/Function(Expression|Declaration)$/.test(ancestors[i].type)){depth++;}if(ancestors[i].type!=='Property'&&ancestors[i].type!=='MethodDefinition'||ancestors[i].key.name!=='componentDidMount'||mode!=='disallow-in-func'&&depth>1){continue;}context.report({node:callee,message:'Do not use setState in componentDidMount'});break;}}};}};},{}],318:[function(require,module,exports){/**\n * @fileoverview Prevent usage of setState in componentDidUpdate\n * @author Yannick Croissant\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of setState in componentDidUpdate',category:'Best Practices',recommended:false},schema:[{enum:['disallow-in-func']}]},create:function create(context){var mode=context.options[0]||'allow-in-func';// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){var callee=node.callee;if(callee.type!=='MemberExpression'||callee.object.type!=='ThisExpression'||callee.property.name!=='setState'){return;}var ancestors=context.getAncestors(callee).reverse();var depth=0;for(var i=0,j=ancestors.length;i<j;i++){if(/Function(Expression|Declaration)$/.test(ancestors[i].type)){depth++;}if(ancestors[i].type!=='Property'&&ancestors[i].type!=='MethodDefinition'||ancestors[i].key.name!=='componentDidUpdate'||mode!=='disallow-in-func'&&depth>1){continue;}context.report({node:callee,message:'Do not use setState in componentDidUpdate'});break;}}};}};},{}],319:[function(require,module,exports){/**\n * @fileoverview Prevent direct mutation of this.state\n * @author David Petersen\n */'use strict';var has=require(\"has\");var Components=require(\"../util/Components\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent direct mutation of this.state',category:'Possible Errors',recommended:true}},create:Components.detect(function(context,components,utils){/**\n     * Checks if the component is valid\n     * @param {Object} component The component to process\n     * @returns {Boolean} True if the component is valid, false if not.\n     */function isValid(component){return Boolean(component&&!component.mutateSetState);}/**\n     * Reports undeclared proptypes for a given component\n     * @param {Object} component The component to process\n     */function reportMutations(component){var mutation;for(var i=0,j=component.mutations.length;i<j;i++){mutation=component.mutations[i];context.report({node:mutation,message:'Do not mutate state directly. Use setState().'});}}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{AssignmentExpression:function AssignmentExpression(node){var item;if(!node.left||!node.left.object||!node.left.object.object){return;}item=node.left.object;while(item.object.property){item=item.object;}if(item.object.type==='ThisExpression'&&item.property.name==='state'){var component=components.get(utils.getParentComponent());var mutations=component&&component.mutations||[];mutations.push(node.left.object);components.set(node,{mutateSetState:true,mutations:mutations});}},'Program:exit':function ProgramExit(){var list=components.list();for(var component in list){if(!has(list,component)||isValid(list[component])){continue;}reportMutations(list[component]);}}};})};},{\"../util/Components\":343,\"has\":376}],320:[function(require,module,exports){/**\n * @fileoverview Prevent usage of findDOMNode\n * @author Yannick Croissant\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of findDOMNode',category:'Best Practices',recommended:true},schema:[]},create:function create(context){// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){var callee=node.callee;var isfindDOMNode=callee.object&&callee.object.callee&&callee.object.callee.name==='findDOMNode'||callee.property&&callee.property.name==='findDOMNode';if(!isfindDOMNode){return;}context.report({node:callee,message:'Do not use findDOMNode'});}};}};},{}],321:[function(require,module,exports){/**\n * @fileoverview Prevent usage of isMounted\n * @author Joe Lencioni\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of isMounted',category:'Best Practices',recommended:true},schema:[]},create:function create(context){// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){var callee=node.callee;if(callee.type!=='MemberExpression'){return;}if(callee.object.type!=='ThisExpression'||callee.property.name!=='isMounted'){return;}var ancestors=context.getAncestors(callee);for(var i=0,j=ancestors.length;i<j;i++){if(ancestors[i].type==='Property'||ancestors[i].type==='MethodDefinition'){context.report({node:callee,message:'Do not use isMounted'});break;}}}};}};},{}],322:[function(require,module,exports){/**\n * @fileoverview Prevent multiple component definition per file\n * @author Yannick Croissant\n */'use strict';var has=require(\"has\");var Components=require(\"../util/Components\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent multiple component definition per file',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{ignoreStateless:{default:false,type:'boolean'}},additionalProperties:false}]},create:Components.detect(function(context,components){var configuration=context.options[0]||{};var ignoreStateless=configuration.ignoreStateless||false;var MULTI_COMP_MESSAGE='Declare only one React component per file';/**\n     * Checks if the component is ignored\n     * @param {Object} component The component being checked.\n     * @returns {Boolean} True if the component is ignored, false if not.\n     */function isIgnored(component){return ignoreStateless&&/Function/.test(component.node.type);}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{'Program:exit':function ProgramExit(){if(components.length()<=1){return;}var list=components.list();var i=0;for(var component in list){if(!has(list,component)||isIgnored(list[component])||++i===1){continue;}context.report({node:list[component].node,message:MULTI_COMP_MESSAGE});}}};})};},{\"../util/Components\":343,\"has\":376}],323:[function(require,module,exports){/**\n * @fileoverview Prevent usage of the return value of React.render\n * @author Dustan Kasten\n */'use strict';var versionUtil=require(\"../util/version\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of the return value of React.render',category:'Best Practices',recommended:true},schema:[]},create:function create(context){// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){var callee=node.callee;var parent=node.parent;if(callee.type!=='MemberExpression'){return;}var calleeObjectName=/^ReactDOM$/;if(versionUtil.test(context,'15.0.0')){calleeObjectName=/^ReactDOM$/;}else if(versionUtil.test(context,'0.14.0')){calleeObjectName=/^React(DOM)?$/;}else if(versionUtil.test(context,'0.13.0')){calleeObjectName=/^React$/;}if(callee.object.type!=='Identifier'||!calleeObjectName.test(callee.object.name)||callee.property.name!=='render'){return;}if(parent.type==='VariableDeclarator'||parent.type==='Property'||parent.type==='ReturnStatement'||parent.type==='ArrowFunctionExpression'){context.report({node:callee,message:'Do not depend on the return value from '+callee.object.name+'.render'});}}};}};},{\"../util/version\":348}],324:[function(require,module,exports){/**\n * @fileoverview Prevent usage of setState\n * @author Mark Dalgleish\n */'use strict';var has=require(\"has\");var Components=require(\"../util/Components\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of setState',category:'Stylistic Issues',recommended:false},schema:[]},create:Components.detect(function(context,components,utils){/**\n     * Checks if the component is valid\n     * @param {Object} component The component to process\n     * @returns {Boolean} True if the component is valid, false if not.\n     */function isValid(component){return Boolean(component&&!component.useSetState);}/**\n     * Reports usages of setState for a given component\n     * @param {Object} component The component to process\n     */function reportSetStateUsages(component){var setStateUsage;for(var i=0,j=component.setStateUsages.length;i<j;i++){setStateUsage=component.setStateUsages[i];context.report({node:setStateUsage,message:'Do not use setState'});}}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){var callee=node.callee;if(callee.type!=='MemberExpression'||callee.object.type!=='ThisExpression'||callee.property.name!=='setState'){return;}var component=components.get(utils.getParentComponent());var setStateUsages=component&&component.setStateUsages||[];setStateUsages.push(callee);components.set(node,{useSetState:true,setStateUsages:setStateUsages});},'Program:exit':function ProgramExit(){var list=components.list();for(var component in list){if(!has(list,component)||isValid(list[component])){continue;}reportSetStateUsages(list[component]);}}};})};},{\"../util/Components\":343,\"has\":376}],325:[function(require,module,exports){/**\n * @fileoverview Prevent string definitions for references and prevent referencing this.refs\n * @author Tom Hastjarjanto\n */'use strict';var Components=require(\"../util/Components\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent string definitions for references and prevent referencing this.refs',category:'Best Practices',recommended:false},schema:[]},create:Components.detect(function(context,components,utils){/**\n     * Checks if we are using refs\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are using refs, false if not.\n     */function isRefsUsage(node){return Boolean((utils.getParentES6Component()||utils.getParentES5Component())&&node.object.type==='ThisExpression'&&node.property.name==='refs');}/**\n     * Checks if we are using a ref attribute\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are using a ref attribute, false if not.\n     */function isRefAttribute(node){return Boolean(node.type==='JSXAttribute'&&node.name&&node.name.name==='ref');}/**\n     * Checks if a node contains a string value\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node contains a string value, false if not.\n     */function containsStringLiteral(node){return Boolean(node.value&&node.value.type==='Literal'&&typeof node.value.value==='string');}/**\n     * Checks if a node contains a string value within a jsx expression\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node contains a string value within a jsx expression, false if not.\n     */function containsStringExpressionContainer(node){return Boolean(node.value&&node.value.type==='JSXExpressionContainer'&&node.value.expression&&node.value.expression.type==='Literal'&&typeof node.value.expression.value==='string');}return{MemberExpression:function MemberExpression(node){if(isRefsUsage(node)){context.report({node:node,message:'Using this.refs is deprecated.'});}},JSXAttribute:function JSXAttribute(node){if(isRefAttribute(node)&&(containsStringLiteral(node)||containsStringExpressionContainer(node))){context.report({node:node,message:'Using string literals in ref attributes is deprecated.'});}}};})};},{\"../util/Components\":343}],326:[function(require,module,exports){/**\n * @fileoverview HTML special characters should be escaped.\n * @author Patrick Hayes\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\n// NOTE: '<' and '{' are also problematic characters, but they do not need\n// to be included here because it is a syntax error when these characters are\n// included accidentally.\nvar DEFAULTS=['>','\"','\\'','}'];module.exports={meta:{docs:{description:'Detect unescaped HTML entities, which might represent malformed tags',category:'Possible Errors',recommended:false},schema:[{type:'object',properties:{forbid:{type:'array',items:{type:'string'}}},additionalProperties:false}]},create:function create(context){function isInvalidEntity(node){var configuration=context.options[0]||{};var entities=configuration.forbid||DEFAULTS;// HTML entites are already escaped in node.value (as well as node.raw),\n// so pull the raw text from context.getSourceCode()\nfor(var i=node.loc.start.line;i<=node.loc.end.line;i++){var rawLine=context.getSourceCode().lines[i-1];var start=0;var end=rawLine.length;if(i===node.loc.start.line){start=node.loc.start.column;}if(i===node.loc.end.line){end=node.loc.end.column;}rawLine=rawLine.substring(start,end);for(var j=0;j<entities.length;j++){for(var index=0;index<rawLine.length;index++){var c=rawLine[index];if(c===entities[j]){context.report({loc:{line:i,column:start+index},message:'HTML entities must be escaped.',node:node});}}}}}return{Literal:function Literal(node){if(node.type==='Literal'&&node.parent.type==='JSXElement'){if(isInvalidEntity(node)){context.report(node,'HTML entities must be escaped.');}}}};}};},{}],327:[function(require,module,exports){/**\n * @fileoverview Prevent usage of unknown DOM property\n * @author Yannick Croissant\n */'use strict';// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DEFAULTS={ignore:[]};var UNKNOWN_MESSAGE='Unknown property \\'{{name}}\\' found, use \\'{{standardName}}\\' instead';var DOM_ATTRIBUTE_NAMES={'accept-charset':'acceptCharset',class:'className',for:'htmlFor','http-equiv':'httpEquiv'};var SVGDOM_ATTRIBUTE_NAMES={'accent-height':'accentHeight','alignment-baseline':'alignmentBaseline','arabic-form':'arabicForm','baseline-shift':'baselineShift','cap-height':'capHeight','clip-path':'clipPath','clip-rule':'clipRule','color-interpolation':'colorInterpolation','color-interpolation-filters':'colorInterpolationFilters','color-profile':'colorProfile','color-rendering':'colorRendering','dominant-baseline':'dominantBaseline','enable-background':'enableBackground','fill-opacity':'fillOpacity','fill-rule':'fillRule','flood-color':'floodColor','flood-opacity':'floodOpacity','font-family':'fontFamily','font-size':'fontSize','font-size-adjust':'fontSizeAdjust','font-stretch':'fontStretch','font-style':'fontStyle','font-variant':'fontVariant','font-weight':'fontWeight','glyph-name':'glyphName','glyph-orientation-horizontal':'glyphOrientationHorizontal','glyph-orientation-vertical':'glyphOrientationVertical','horiz-adv-x':'horizAdvX','horiz-origin-x':'horizOriginX','image-rendering':'imageRendering','letter-spacing':'letterSpacing','lighting-color':'lightingColor','marker-end':'markerEnd','marker-mid':'markerMid','marker-start':'markerStart','overline-position':'overlinePosition','overline-thickness':'overlineThickness','paint-order':'paintOrder','panose-1':'panose1','pointer-events':'pointerEvents','rendering-intent':'renderingIntent','shape-rendering':'shapeRendering','stop-color':'stopColor','stop-opacity':'stopOpacity','strikethrough-position':'strikethroughPosition','strikethrough-thickness':'strikethroughThickness','stroke-dasharray':'strokeDasharray','stroke-dashoffset':'strokeDashoffset','stroke-linecap':'strokeLinecap','stroke-linejoin':'strokeLinejoin','stroke-miterlimit':'strokeMiterlimit','stroke-opacity':'strokeOpacity','stroke-width':'strokeWidth','text-anchor':'textAnchor','text-decoration':'textDecoration','text-rendering':'textRendering','underline-position':'underlinePosition','underline-thickness':'underlineThickness','unicode-bidi':'unicodeBidi','unicode-range':'unicodeRange','units-per-em':'unitsPerEm','v-alphabetic':'vAlphabetic','v-hanging':'vHanging','v-ideographic':'vIdeographic','v-mathematical':'vMathematical','vector-effect':'vectorEffect','vert-adv-y':'vertAdvY','vert-origin-x':'vertOriginX','vert-origin-y':'vertOriginY','word-spacing':'wordSpacing','writing-mode':'writingMode','x-height':'xHeight','xlink:actuate':'xlinkActuate','xlink:arcrole':'xlinkArcrole','xlink:href':'xlinkHref','xlink:role':'xlinkRole','xlink:show':'xlinkShow','xlink:title':'xlinkTitle','xlink:type':'xlinkType','xml:base':'xmlBase','xml:lang':'xmlLang','xml:space':'xmlSpace'};var DOM_PROPERTY_NAMES=[// Standard\n'acceptCharset','accessKey','allowFullScreen','allowTransparency','autoComplete','autoFocus','autoPlay','cellPadding','cellSpacing','charSet','classID','className','colSpan','contentEditable','contextMenu','crossOrigin','dateTime','encType','formAction','formEncType','formMethod','formNoValidate','formTarget','frameBorder','hrefLang','htmlFor','httpEquiv','inputMode','keyParams','keyType','marginHeight','marginWidth','maxLength','mediaGroup','minLength','noValidate','onAnimationEnd','onAnimationIteration','onAnimationStart','onBlur','onChange','onClick','onContextMenu','onCopy','onCompositionEnd','onCompositionStart','onCompositionUpdate','onCut','onDoubleClick','onDrag','onDragEnd','onDragEnter','onDragExit','onDragLeave','onError','onFocus','onInput','onKeyDown','onKeyPress','onKeyUp','onLoad','onWheel','onDragOver','onDragStart','onDrop','onMouseDown','onMouseEnter','onMouseLeave','onMouseMove','onMouseOut','onMouseOver','onMouseUp','onPaste','onScroll','onSelect','onSubmit','onTransitionEnd','radioGroup','readOnly','rowSpan','spellCheck','srcDoc','srcLang','srcSet','tabIndex','useMap',// Non standard\n'autoCapitalize','autoCorrect','autoSave','itemProp','itemScope','itemType','itemRef','itemID'];// ------------------------------------------------------------------------------\n// Helpers\n// ------------------------------------------------------------------------------\n/**\n * Checks if a node matches the JSX tag convention.\n * @param {Object} node - JSX element being tested.\n * @returns {boolean} Whether or not the node name match the JSX tag convention.\n */var tagConvention=/^[a-z][^-]*$/;function isTagName(node){if(tagConvention.test(node.parent.name.name)){// http://www.w3.org/TR/custom-elements/#type-extension-semantics\nreturn!node.parent.attributes.some(function(attrNode){return attrNode.type==='JSXAttribute'&&attrNode.name.type==='JSXIdentifier'&&attrNode.name.name==='is';});}return false;}/**\n * Get the standard name of the attribute.\n * @param {String} name - Name of the attribute.\n * @returns {String} The standard name of the attribute.\n */function getStandardName(name){if(DOM_ATTRIBUTE_NAMES[name]){return DOM_ATTRIBUTE_NAMES[name];}if(SVGDOM_ATTRIBUTE_NAMES[name]){return SVGDOM_ATTRIBUTE_NAMES[name];}var i;var found=DOM_PROPERTY_NAMES.some(function(element,index){i=index;return element.toLowerCase()===name;});return found?DOM_PROPERTY_NAMES[i]:null;}// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent usage of unknown DOM property',category:'Possible Errors',recommended:true},fixable:'code',schema:[{type:'object',properties:{ignore:{type:'array',items:{type:'string'}}},additionalProperties:false}]},create:function create(context){function getIgnoreConfig(){return context.options[0]&&context.options[0].ignore||DEFAULTS.ignore;}var sourceCode=context.getSourceCode();return{JSXAttribute:function JSXAttribute(node){var ignoreNames=getIgnoreConfig();var name=sourceCode.getText(node.name);var standardName=getStandardName(name);if(!isTagName(node)||!standardName||ignoreNames.indexOf(name)>=0){return;}context.report({node:node,message:UNKNOWN_MESSAGE,data:{name:name,standardName:standardName},fix:function fix(fixer){return fixer.replaceText(node.name,standardName);}});}};}};},{}],328:[function(require,module,exports){/**\n * @fileoverview Prevent definitions of unused prop types\n * @author Evgueni Naverniouk\n */'use strict';// As for exceptions for props.children or props.className (and alike) look at\n// https://github.com/yannickcr/eslint-plugin-react/issues/7\nvar has=require(\"has\");var assign=require(\"object.assign\");var Components=require(\"../util/Components\");var variable=require(\"../util/variable\");var annotations=require(\"../util/annotations\");// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DIRECT_PROPS_REGEX=/^props\\s*(\\.|\\[)/;// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent definitions of unused prop types',category:'Best Practices',recommended:false},schema:[{type:'object',properties:{customValidators:{type:'array',items:{type:'string'}},skipShapeProps:{type:'boolean'}},additionalProperties:false}]},create:Components.detect(function(context,components,utils){var defaults={skipShapeProps:true};var sourceCode=context.getSourceCode();var configuration=assign({},defaults,context.options[0]||{});var skipShapeProps=configuration.skipShapeProps;var customValidators=configuration.customValidators||[];// Used to track the type annotations in scope.\n// Necessary because babel's scopes do not track type annotations.\nvar stack=null;var UNUSED_MESSAGE='\\'{{name}}\\' PropType is defined but prop is never used';/**\n     * Helper for accessing the current scope in the stack.\n     * @param {string} key The name of the identifier to access. If omitted, returns the full scope.\n     * @param {ASTNode} value If provided sets the new value for the identifier.\n     * @returns {Object|ASTNode} Either the whole scope or the ASTNode associated with the given identifier.\n     */function typeScope(key,value){if(arguments.length===0){return stack[stack.length-1];}else if(arguments.length===1){return stack[stack.length-1][key];}stack[stack.length-1][key]=value;return value;}/**\n     * Checks if we are using a prop\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are using a prop, false if not.\n     */function isPropTypesUsage(node){var isClassUsage=(utils.getParentES6Component()||utils.getParentES5Component())&&node.object.type==='ThisExpression'&&node.property.name==='props';var isStatelessFunctionUsage=node.object.name==='props';return isClassUsage||isStatelessFunctionUsage;}/**\n     * Checks if we are declaring a `props` class property with a flow type annotation.\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node is a type annotated props declaration, false if not.\n     */function isAnnotatedClassPropsDeclaration(node){if(node&&node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);if(node.typeAnnotation&&(tokens[0].value==='props'||tokens[1]&&tokens[1].value==='props')){return true;}}return false;}/**\n     * Checks if we are declaring a prop\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are declaring a prop, false if not.\n     */function isPropTypesDeclaration(node){// Special case for class properties\n// (babel-eslint does not expose property name so we have to rely on tokens)\nif(node&&node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);if(tokens[0].value==='propTypes'||tokens[1]&&tokens[1].value==='propTypes'){return true;}return false;}return Boolean(node&&node.name==='propTypes');}/**\n     * Checks if prop should be validated by plugin-react-proptypes\n     * @param {String} validator Name of validator to check.\n     * @returns {Boolean} True if validator should be checked by custom validator.\n     */function hasCustomValidator(validator){return customValidators.indexOf(validator)!==-1;}/**\n     * Checks if the component must be validated\n     * @param {Object} component The component to process\n     * @returns {Boolean} True if the component must be validated, false if not.\n     */function mustBeValidated(component){return Boolean(component&&component.usedPropTypes&&!component.ignorePropsValidation);}/**\n     * Returns true if the given node is a React Component lifecycle method\n     * @param {ASTNode} node The AST node being checked.\n     * @return {Boolean} True if the node is a lifecycle method\n     */function isNodeALifeCycleMethod(node){var nodeKeyName=(node.key||{}).name;return node.kind==='constructor'||nodeKeyName==='componentWillReceiveProps'||nodeKeyName==='shouldComponentUpdate'||nodeKeyName==='componentWillUpdate'||nodeKeyName==='componentDidUpdate';}/**\n     * Returns true if the given node is inside a React Component lifecycle\n     * method.\n     * @param {ASTNode} node The AST node being checked.\n     * @return {Boolean} True if the node is inside a lifecycle method\n     */function isInLifeCycleMethod(node){if(node.type==='MethodDefinition'&&isNodeALifeCycleMethod(node)){return true;}if(node.parent){return isInLifeCycleMethod(node.parent);}return false;}/**\n     * Checks if a prop init name matches common naming patterns\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the prop name matches\n     */function isPropAttributeName(node){return node.init.name==='props'||node.init.name==='nextProps'||node.init.name==='prevProps';}/**\n     * Checks if a prop is used\n     * @param {ASTNode} node The AST node being checked.\n     * @param {Object} prop Declared prop object\n     * @returns {Boolean} True if the prop is used, false if not.\n     */function isPropUsed(node,prop){for(var i=0,l=node.usedPropTypes.length;i<l;i++){var usedProp=node.usedPropTypes[i];if(prop.type==='shape'||prop.name==='__ANY_KEY__'||usedProp.name===prop.name){return true;}}return false;}/**\n     * Checks if the prop has spread operator.\n     * @param {ASTNode} node The AST node being marked.\n     * @returns {Boolean} True if the prop has spread operator, false if not.\n     */function hasSpreadOperator(node){var tokens=sourceCode.getTokens(node);return tokens.length&&tokens[0].value==='...';}/**\n     * Retrieve the name of a key node\n     * @param {ASTNode} node The AST node with the key.\n     * @return {string} the name of the key\n     */function getKeyValue(node){if(node.type==='ObjectTypeProperty'){var tokens=context.getFirstTokens(node,1);return tokens[0].value;}var key=node.key||node.argument;return key.type==='Identifier'?key.name:key.value;}/**\n     * Iterates through a properties node, like a customized forEach.\n     * @param {Object[]} properties Array of properties to iterate.\n     * @param {Function} fn Function to call on each property, receives property key\n        and property value. (key, value) => void\n     */function iterateProperties(properties,fn){if(properties.length&&typeof fn==='function'){for(var i=0,j=properties.length;i<j;i++){var node=properties[i];var key=getKeyValue(node);var value=node.value;fn(key,value);}}}/**\n     * Creates the representation of the React propTypes for the component.\n     * The representation is used to verify nested used properties.\n     * @param {ASTNode} value Node of the React.PropTypes for the desired property\n     * @param {String} parentName Name of the parent prop node.\n     * @return {Object|Boolean} The representation of the declaration, true means\n     *    the property is declared without the need for further analysis.\n     */function buildReactDeclarationTypes(value,parentName){if(value&&value.callee&&value.callee.object&&hasCustomValidator(value.callee.object.name)){return true;}if(value&&value.type==='MemberExpression'&&value.property&&value.property.name&&value.property.name==='isRequired'){value=value.object;}// Verify React.PropTypes that are functions\nif(value&&value.type==='CallExpression'&&value.callee&&value.callee.property&&value.callee.property.name&&value.arguments&&value.arguments.length>0){var callName=value.callee.property.name;var argument=value.arguments[0];switch(callName){case'shape':if(skipShapeProps){return true;}if(argument.type!=='ObjectExpression'){// Invalid proptype or cannot analyse statically\nreturn true;}var shapeTypeDefinition={type:'shape',children:[]};iterateProperties(argument.properties,function(childKey,childValue){var fullName=[parentName,childKey].join('.');var types=buildReactDeclarationTypes(childValue,fullName);if(types===true){types={};}types.fullName=fullName;types.name=childKey;types.node=childValue;shapeTypeDefinition.children.push(types);});return shapeTypeDefinition;case'arrayOf':case'objectOf':var fullName=[parentName,'*'].join('.');var child=buildReactDeclarationTypes(argument,fullName);if(child===true){child={};}child.fullName=fullName;child.name='__ANY_KEY__';child.node=argument;return{type:'object',children:[child]};case'oneOfType':if(!argument.elements||!argument.elements.length){// Invalid proptype or cannot analyse statically\nreturn true;}var unionTypeDefinition={type:'union',children:[]};for(var i=0,j=argument.elements.length;i<j;i++){var type=buildReactDeclarationTypes(argument.elements[i],parentName);// keep only complex type\nif(type!==true){if(type.children===true){// every child is accepted for one type, abort type analysis\nunionTypeDefinition.children=true;return unionTypeDefinition;}}unionTypeDefinition.children.push(type);}if(unionTypeDefinition.length===0){// no complex type found, simply accept everything\nreturn true;}return unionTypeDefinition;case'instanceOf':return{type:'instance',// Accept all children because we can't know what type they are\nchildren:true};case'oneOf':default:return true;}}// Unknown property or accepts everything (any, object, ...)\nreturn true;}/**\n     * Creates the representation of the React props type annotation for the component.\n     * The representation is used to verify nested used properties.\n     * @param {ASTNode} annotation Type annotation for the props class property.\n     * @param {String} parentName Name of the parent prop node.\n     * @return {Object|Boolean} The representation of the declaration, true means\n     *    the property is declared without the need for further analysis.\n     */function buildTypeAnnotationDeclarationTypes(annotation,parentName){switch(annotation.type){case'GenericTypeAnnotation':if(typeScope(annotation.id.name)){return buildTypeAnnotationDeclarationTypes(typeScope(annotation.id.name),parentName);}return true;case'ObjectTypeAnnotation':var shapeTypeDefinition={type:'shape',children:[]};iterateProperties(annotation.properties,function(childKey,childValue){var fullName=[parentName,childKey].join('.');var types=buildTypeAnnotationDeclarationTypes(childValue,fullName);if(types===true){types={};}types.fullName=fullName;types.name=childKey;types.node=childValue;shapeTypeDefinition.children.push(types);});return shapeTypeDefinition;case'UnionTypeAnnotation':var unionTypeDefinition={type:'union',children:[]};for(var i=0,j=annotation.types.length;i<j;i++){var type=buildTypeAnnotationDeclarationTypes(annotation.types[i],parentName);// keep only complex type\nif(type!==true){if(type.children===true){// every child is accepted for one type, abort type analysis\nunionTypeDefinition.children=true;return unionTypeDefinition;}}unionTypeDefinition.children.push(type);}if(unionTypeDefinition.children.length===0){// no complex type found, simply accept everything\nreturn true;}return unionTypeDefinition;case'ArrayTypeAnnotation':var fullName=[parentName,'*'].join('.');var child=buildTypeAnnotationDeclarationTypes(annotation.elementType,fullName);if(child===true){child={};}child.fullName=fullName;child.name='__ANY_KEY__';child.node=annotation;return{type:'object',children:[child]};default:// Unknown or accepts everything.\nreturn true;}}/**\n     * Check if we are in a class constructor\n     * @return {boolean} true if we are in a class constructor, false if not\n     */function inConstructor(){var scope=context.getScope();while(scope){if(scope.block&&scope.block.parent&&scope.block.parent.kind==='constructor'){return true;}scope=scope.upper;}return false;}/**\n     * Retrieve the name of a property node\n     * @param {ASTNode} node The AST node with the property.\n     * @return {string} the name of the property or undefined if not found\n     */function getPropertyName(node){var isDirectProp=DIRECT_PROPS_REGEX.test(sourceCode.getText(node));var isInClassComponent=utils.getParentES6Component()||utils.getParentES5Component();var isNotInConstructor=!inConstructor(node);if(isDirectProp&&isInClassComponent&&isNotInConstructor){return void 0;}if(!isDirectProp){node=node.parent;}var property=node.property;if(property){switch(property.type){case'Identifier':if(node.computed){return'__COMPUTED_PROP__';}return property.name;case'MemberExpression':return void 0;case'Literal':// Accept computed properties that are literal strings\nif(typeof property.value==='string'){return property.value;}// falls through\ndefault:if(node.computed){return'__COMPUTED_PROP__';}break;}}return void 0;}/**\n     * Mark a prop type as used\n     * @param {ASTNode} node The AST node being marked.\n     */function markPropTypesAsUsed(node,parentNames){parentNames=parentNames||[];var type;var name;var allNames;var properties;switch(node.type){case'MemberExpression':name=getPropertyName(node);if(name){allNames=parentNames.concat(name);if(node.parent.type==='MemberExpression'){markPropTypesAsUsed(node.parent,allNames);}// Do not mark computed props as used.\ntype=name!=='__COMPUTED_PROP__'?'direct':null;}else if(node.parent.id&&node.parent.id.properties&&node.parent.id.properties.length&&getKeyValue(node.parent.id.properties[0])){type='destructuring';properties=node.parent.id.properties;}break;case'ArrowFunctionExpression':case'FunctionDeclaration':case'FunctionExpression':type='destructuring';properties=node.params[0].properties;break;case'VariableDeclarator':for(var i=0,j=node.id.properties.length;i<j;i++){// let {props: {firstname}} = this\nvar thisDestructuring=node.id.properties[i].key&&(node.id.properties[i].key.name==='props'||node.id.properties[i].key.value==='props')&&node.id.properties[i].value.type==='ObjectPattern';// let {firstname} = props\nvar genericDestructuring=isPropAttributeName(node)&&(utils.getParentStatelessComponent()||isInLifeCycleMethod(node));if(thisDestructuring){properties=node.id.properties[i].value.properties;}else if(genericDestructuring){properties=node.id.properties;}else{continue;}type='destructuring';break;}break;default:throw new Error(node.type+' ASTNodes are not handled by markPropTypesAsUsed');}var component=components.get(utils.getParentComponent());var usedPropTypes=component&&component.usedPropTypes||[];var ignorePropsValidation=component&&component.ignorePropsValidation||false;switch(type){case'direct':// Ignore Object methods\nif(Object.prototype[name]){break;}usedPropTypes.push({name:name,allNames:allNames});break;case'destructuring':for(var k=0,l=(properties||[]).length;k<l;k++){if(hasSpreadOperator(properties[k])||properties[k].computed){ignorePropsValidation=true;break;}var propName=getKeyValue(properties[k]);var currentNode=node;allNames=[];while(currentNode.property&&currentNode.property.name!=='props'){allNames.unshift(currentNode.property.name);currentNode=currentNode.object;}allNames.push(propName);if(propName){usedPropTypes.push({allNames:allNames,name:propName});}}break;default:break;}components.set(node,{usedPropTypes:usedPropTypes,ignorePropsValidation:ignorePropsValidation});}/**\n     * Mark a prop type as declared\n     * @param {ASTNode} node The AST node being checked.\n     * @param {propTypes} node The AST node containing the proptypes\n     */function markPropTypesAsDeclared(node,propTypes){var component=components.get(node);var declaredPropTypes=component&&component.declaredPropTypes||[];var ignorePropsValidation=component&&component.ignorePropsValidation||false;switch(propTypes&&propTypes.type){case'ObjectTypeAnnotation':iterateProperties(propTypes.properties,function(key,value){var types=buildTypeAnnotationDeclarationTypes(value,key);if(types===true){types={};}types.fullName=key;types.name=key;types.node=value;declaredPropTypes.push(types);});break;case'ObjectExpression':iterateProperties(propTypes.properties,function(key,value){if(!value){ignorePropsValidation=true;return;}var types=buildReactDeclarationTypes(value,key);if(types===true){types={};}types.fullName=key;types.name=key;types.node=value;declaredPropTypes.push(types);});break;case'MemberExpression':break;case'Identifier':var variablesInScope=variable.variablesInScope(context);for(var i=0,j=variablesInScope.length;i<j;i++){if(variablesInScope[i].name!==propTypes.name){continue;}var defInScope=variablesInScope[i].defs[variablesInScope[i].defs.length-1];markPropTypesAsDeclared(node,defInScope.node&&defInScope.node.init);return;}ignorePropsValidation=true;break;case null:break;default:ignorePropsValidation=true;break;}components.set(node,{declaredPropTypes:declaredPropTypes,ignorePropsValidation:ignorePropsValidation});}/**\n     * Used to recursively loop through each declared prop type\n     * @param {Object} component The component to process\n     * @param {Array} props List of props to validate\n     */function reportUnusedPropType(component,props){// Skip props that check instances\nif(props===true){return;}(props||[]).forEach(function(prop){// Skip props that check instances\nif(prop===true){return;}if(prop.node&&!isPropUsed(component,prop)){context.report(prop.node,UNUSED_MESSAGE,{name:prop.fullName});}if(prop.children){reportUnusedPropType(component,prop.children);}});}/**\n     * Reports unused proptypes for a given component\n     * @param {Object} component The component to process\n     */function reportUnusedPropTypes(component){reportUnusedPropType(component,component.declaredPropTypes);}/**\n     * Resolve the type annotation for a given node.\n     * Flow annotations are sometimes wrapped in outer `TypeAnnotation`\n     * and `NullableTypeAnnotation` nodes which obscure the annotation we're\n     * interested in.\n     * This method also resolves type aliases where possible.\n     *\n     * @param {ASTNode} node The annotation or a node containing the type annotation.\n     * @returns {ASTNode} The resolved type annotation for the node.\n     */function resolveTypeAnnotation(node){var annotation=node.typeAnnotation||node;while(annotation&&(annotation.type==='TypeAnnotation'||annotation.type==='NullableTypeAnnotation')){annotation=annotation.typeAnnotation;}if(annotation.type==='GenericTypeAnnotation'&&typeScope(annotation.id.name)){return typeScope(annotation.id.name);}return annotation;}/**\n     * @param {ASTNode} node We expect either an ArrowFunctionExpression,\n     *   FunctionDeclaration, or FunctionExpression\n     */function markDestructuredFunctionArgumentsAsUsed(node){var destructuring=node.params&&node.params[0]&&node.params[0].type==='ObjectPattern';if(destructuring&&components.get(node)){markPropTypesAsUsed(node);}}/**\n     * @param {ASTNode} node We expect either an ArrowFunctionExpression,\n     *   FunctionDeclaration, or FunctionExpression\n     */function markAnnotatedFunctionArgumentsAsDeclared(node){if(!node.params||!node.params.length||!annotations.isAnnotatedFunctionPropsDeclaration(node,context)){return;}markPropTypesAsDeclared(node,resolveTypeAnnotation(node.params[0]));}/**\n     * @param {ASTNode} node We expect either an ArrowFunctionExpression,\n     *   FunctionDeclaration, or FunctionExpression\n     */function handleStatelessComponent(node){markDestructuredFunctionArgumentsAsUsed(node);markAnnotatedFunctionArgumentsAsDeclared(node);}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{ClassProperty:function ClassProperty(node){if(isAnnotatedClassPropsDeclaration(node)){markPropTypesAsDeclared(node,resolveTypeAnnotation(node));}else if(isPropTypesDeclaration(node)){markPropTypesAsDeclared(node,node.value);}},VariableDeclarator:function VariableDeclarator(node){var destructuring=node.init&&node.id&&node.id.type==='ObjectPattern';// let {props: {firstname}} = this\nvar thisDestructuring=destructuring&&node.init.type==='ThisExpression';// let {firstname} = props\nvar statelessDestructuring=destructuring&&isPropAttributeName(node)&&(utils.getParentStatelessComponent()||isInLifeCycleMethod(node));if(!thisDestructuring&&!statelessDestructuring){return;}markPropTypesAsUsed(node);},FunctionDeclaration:handleStatelessComponent,ArrowFunctionExpression:handleStatelessComponent,FunctionExpression:handleStatelessComponent,MemberExpression:function MemberExpression(node){var type;if(isPropTypesUsage(node)){type='usage';}else if(isPropTypesDeclaration(node.property)){type='declaration';}switch(type){case'usage':markPropTypesAsUsed(node);break;case'declaration':var component=utils.getRelatedComponent(node);if(!component){return;}markPropTypesAsDeclared(component.node,node.parent.right||node.parent);break;default:break;}},MethodDefinition:function MethodDefinition(node){if(!isPropTypesDeclaration(node.key)){return;}var i=node.value.body.body.length-1;for(;i>=0;i--){if(node.value.body.body[i].type==='ReturnStatement'){break;}}if(i>=0){markPropTypesAsDeclared(node,node.value.body.body[i].argument);}},ObjectPattern:function ObjectPattern(node){// If the object pattern is a destructured props object in a lifecycle\n// method -- mark it for used props.\nif(isNodeALifeCycleMethod(node.parent.parent)){node.properties.forEach(function(property,i){if(i===0){markPropTypesAsUsed(node.parent);}});}},ObjectExpression:function ObjectExpression(node){// Search for the proptypes declaration\nnode.properties.forEach(function(property){if(!isPropTypesDeclaration(property.key)){return;}markPropTypesAsDeclared(node,property.value);});},TypeAlias:function TypeAlias(node){typeScope(node.id.name,node.right);},Program:function Program(){stack=[{}];},BlockStatement:function BlockStatement(){stack.push((0,_create4.default)(typeScope()));},'BlockStatement:exit':function BlockStatementExit(){stack.pop();},'Program:exit':function ProgramExit(){stack=null;var list=components.list();// Report undeclared proptypes for all classes\nfor(var component in list){if(!has(list,component)||!mustBeValidated(list[component])){continue;}reportUnusedPropTypes(list[component]);}}};})};},{\"../util/Components\":343,\"../util/annotations\":344,\"../util/variable\":347,\"has\":376,\"object.assign\":584}],329:[function(require,module,exports){/**\n * @fileoverview Enforce ES5 or ES6 class for React Components\n * @author Dan Hamilton\n */'use strict';var Components=require(\"../util/Components\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce ES5 or ES6 class for React Components',category:'Stylistic Issues',recommended:false},schema:[{enum:['always','never']}]},create:Components.detect(function(context,components,utils){var configuration=context.options[0]||'always';return{ObjectExpression:function ObjectExpression(node){if(utils.isES5Component(node)&&configuration==='always'){context.report({node:node,message:'Component should use es6 class instead of createClass'});}},ClassDeclaration:function ClassDeclaration(node){if(utils.isES6Component(node)&&configuration==='never'){context.report({node:node,message:'Component should use createClass instead of es6 class'});}}};})};},{\"../util/Components\":343}],330:[function(require,module,exports){/**\n * @fileoverview Enforce stateless components to be written as a pure function\n * @author Yannick Croissant\n * @author Alberto Rodríguez\n * @copyright 2015 Alberto Rodríguez. All rights reserved.\n */'use strict';var has=require(\"has\");var Components=require(\"../util/Components\");var versionUtil=require(\"../util/version\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce stateless components to be written as a pure function',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{ignorePureComponents:{default:false,type:'boolean'}},additionalProperties:false}]},create:Components.detect(function(context,components,utils){var configuration=context.options[0]||{};var ignorePureComponents=configuration.ignorePureComponents||false;var sourceCode=context.getSourceCode();// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\n/**\n     * Get properties name\n     * @param {Object} node - Property.\n     * @returns {String} Property name.\n     */function getPropertyName(node){// Special case for class properties\n// (babel-eslint does not expose property name so we have to rely on tokens)\nif(node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);return tokens[1]&&tokens[1].type==='Identifier'?tokens[1].value:tokens[0].value;}return node.key.name;}/**\n     * Get properties for a given AST node\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Array} Properties array.\n     */function getComponentProperties(node){switch(node.type){case'ClassExpression':case'ClassDeclaration':return node.body.body;case'ObjectExpression':return node.properties;default:return[];}}/**\n     * Checks whether a given array of statements is a single call of `super`.\n     * @see ESLint no-useless-constructor rule\n     * @param {ASTNode[]} body - An array of statements to check.\n     * @returns {boolean} `true` if the body is a single call of `super`.\n     */function isSingleSuperCall(body){return body.length===1&&body[0].type==='ExpressionStatement'&&body[0].expression.type==='CallExpression'&&body[0].expression.callee.type==='Super';}/**\n     * Checks whether a given node is a pattern which doesn't have any side effects.\n     * Default parameters and Destructuring parameters can have side effects.\n     * @see ESLint no-useless-constructor rule\n     * @param {ASTNode} node - A pattern node.\n     * @returns {boolean} `true` if the node doesn't have any side effects.\n     */function isSimple(node){return node.type==='Identifier'||node.type==='RestElement';}/**\n     * Checks whether a given array of expressions is `...arguments` or not.\n     * `super(...arguments)` passes all arguments through.\n     * @see ESLint no-useless-constructor rule\n     * @param {ASTNode[]} superArgs - An array of expressions to check.\n     * @returns {boolean} `true` if the superArgs is `...arguments`.\n     */function isSpreadArguments(superArgs){return superArgs.length===1&&superArgs[0].type==='SpreadElement'&&superArgs[0].argument.type==='Identifier'&&superArgs[0].argument.name==='arguments';}/**\n     * Checks whether given 2 nodes are identifiers which have the same name or not.\n     * @see ESLint no-useless-constructor rule\n     * @param {ASTNode} ctorParam - A node to check.\n     * @param {ASTNode} superArg - A node to check.\n     * @returns {boolean} `true` if the nodes are identifiers which have the same\n     *      name.\n     */function isValidIdentifierPair(ctorParam,superArg){return ctorParam.type==='Identifier'&&superArg.type==='Identifier'&&ctorParam.name===superArg.name;}/**\n     * Checks whether given 2 nodes are a rest/spread pair which has the same values.\n     * @see ESLint no-useless-constructor rule\n     * @param {ASTNode} ctorParam - A node to check.\n     * @param {ASTNode} superArg - A node to check.\n     * @returns {boolean} `true` if the nodes are a rest/spread pair which has the\n     *      same values.\n     */function isValidRestSpreadPair(ctorParam,superArg){return ctorParam.type==='RestElement'&&superArg.type==='SpreadElement'&&isValidIdentifierPair(ctorParam.argument,superArg.argument);}/**\n     * Checks whether given 2 nodes have the same value or not.\n     * @see ESLint no-useless-constructor rule\n     * @param {ASTNode} ctorParam - A node to check.\n     * @param {ASTNode} superArg - A node to check.\n     * @returns {boolean} `true` if the nodes have the same value or not.\n     */function isValidPair(ctorParam,superArg){return isValidIdentifierPair(ctorParam,superArg)||isValidRestSpreadPair(ctorParam,superArg);}/**\n     * Checks whether the parameters of a constructor and the arguments of `super()`\n     * have the same values or not.\n     * @see ESLint no-useless-constructor rule\n     * @param {ASTNode} ctorParams - The parameters of a constructor to check.\n     * @param {ASTNode} superArgs - The arguments of `super()` to check.\n     * @returns {boolean} `true` if those have the same values.\n     */function isPassingThrough(ctorParams,superArgs){if(ctorParams.length!==superArgs.length){return false;}for(var i=0;i<ctorParams.length;++i){if(!isValidPair(ctorParams[i],superArgs[i])){return false;}}return true;}/**\n     * Checks whether the constructor body is a redundant super call.\n     * @see ESLint no-useless-constructor rule\n     * @param {Array} body - constructor body content.\n     * @param {Array} ctorParams - The params to check against super call.\n     * @returns {boolean} true if the construtor body is redundant\n     */function isRedundantSuperCall(body,ctorParams){return isSingleSuperCall(body)&&ctorParams.every(isSimple)&&(isSpreadArguments(body[0].expression.arguments)||isPassingThrough(ctorParams,body[0].expression.arguments));}/**\n     * Check if a given AST node have any other properties the ones available in stateless components\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node has at least one other property, false if not.\n     */function hasOtherProperties(node){var properties=getComponentProperties(node);return properties.some(function(property){var name=getPropertyName(property);var isDisplayName=name==='displayName';var isPropTypes=name==='propTypes'||name==='props'&&property.typeAnnotation;var contextTypes=name==='contextTypes';var isUselessConstructor=property.kind==='constructor'&&isRedundantSuperCall(property.value.body.body,property.value.params);var isRender=name==='render';return!isDisplayName&&!isPropTypes&&!contextTypes&&!isUselessConstructor&&!isRender;});}/**\n     * Mark component as pure as declared\n     * @param {ASTNode} node The AST node being checked.\n     */var markSCUAsDeclared=function markSCUAsDeclared(node){components.set(node,{hasSCU:true});};/**\n     * Mark childContextTypes as declared\n     * @param {ASTNode} node The AST node being checked.\n     */var markChildContextTypesAsDeclared=function markChildContextTypesAsDeclared(node){components.set(node,{hasChildContextTypes:true});};/**\n     * Mark a setState as used\n     * @param {ASTNode} node The AST node being checked.\n     */function markThisAsUsed(node){components.set(node,{useThis:true});}/**\n     * Mark a props or context as used\n     * @param {ASTNode} node The AST node being checked.\n     */function markPropsOrContextAsUsed(node){components.set(node,{usePropsOrContext:true});}/**\n     * Mark a ref as used\n     * @param {ASTNode} node The AST node being checked.\n     */function markRefAsUsed(node){components.set(node,{useRef:true});}/**\n     * Mark return as invalid\n     * @param {ASTNode} node The AST node being checked.\n     */function markReturnAsInvalid(node){components.set(node,{invalidReturn:true});}return{ClassDeclaration:function ClassDeclaration(node){if(ignorePureComponents&&utils.isPureComponent(node)){markSCUAsDeclared(node);}},// Mark `this` destructuring as a usage of `this`\nVariableDeclarator:function VariableDeclarator(node){// Ignore destructuring on other than `this`\nif(!node.id||node.id.type!=='ObjectPattern'||!node.init||node.init.type!=='ThisExpression'){return;}// Ignore `props` and `context`\nvar useThis=node.id.properties.some(function(property){var name=getPropertyName(property);return name!=='props'&&name!=='context';});if(!useThis){markPropsOrContextAsUsed(node);return;}markThisAsUsed(node);},// Mark `this` usage\nMemberExpression:function MemberExpression(node){if(node.object.type!=='ThisExpression'){if(node.property&&node.property.name==='childContextTypes'){var component=utils.getRelatedComponent(node);if(!component){return;}markChildContextTypesAsDeclared(component.node);return;}return;// Ignore calls to `this.props` and `this.context`\n}else if((node.property.name||node.property.value)==='props'||(node.property.name||node.property.value)==='context'){markPropsOrContextAsUsed(node);return;}markThisAsUsed(node);},// Mark `ref` usage\nJSXAttribute:function JSXAttribute(node){var name=sourceCode.getText(node.name);if(name!=='ref'){return;}markRefAsUsed(node);},// Mark `render` that do not return some JSX\nReturnStatement:function ReturnStatement(node){var blockNode;var scope=context.getScope();while(scope){blockNode=scope.block&&scope.block.parent;if(blockNode&&(blockNode.type==='MethodDefinition'||blockNode.type==='Property')){break;}scope=scope.upper;}var isRender=blockNode&&blockNode.key&&blockNode.key.name==='render';var allowNull=versionUtil.test(context,'15.0.0');// Stateless components can return null since React 15\nvar isReturningJSX=utils.isReturningJSX(node,!allowNull);var isReturningNull=node.argument&&(node.argument.value===null||node.argument.value===false);if(!isRender||allowNull&&(isReturningJSX||isReturningNull)||!allowNull&&isReturningJSX){return;}markReturnAsInvalid(node);},'Program:exit':function ProgramExit(){var list=components.list();for(var component in list){if(!has(list,component)||hasOtherProperties(list[component].node)||list[component].useThis||list[component].useRef||list[component].invalidReturn||list[component].hasChildContextTypes||!utils.isES5Component(list[component].node)&&!utils.isES6Component(list[component].node)){continue;}if(list[component].hasSCU&&list[component].usePropsOrContext){continue;}context.report({node:list[component].node,message:'Component should be written as a pure function'});}}};})};},{\"../util/Components\":343,\"../util/version\":348,\"has\":376}],331:[function(require,module,exports){/**\n * @fileoverview Prevent missing props validation in a React component definition\n * @author Yannick Croissant\n */'use strict';// As for exceptions for props.children or props.className (and alike) look at\n// https://github.com/yannickcr/eslint-plugin-react/issues/7\nvar has=require(\"has\");var Components=require(\"../util/Components\");var variable=require(\"../util/variable\");var annotations=require(\"../util/annotations\");// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar PROPS_REGEX=/^(props|nextProps)$/;var DIRECT_PROPS_REGEX=/^(props|nextProps)\\s*(\\.|\\[)/;// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent missing props validation in a React component definition',category:'Best Practices',recommended:true},schema:[{type:'object',properties:{ignore:{type:'array',items:{type:'string'}},customValidators:{type:'array',items:{type:'string'}},skipUndeclared:{type:'boolean'}},additionalProperties:false}]},create:Components.detect(function(context,components,utils){var sourceCode=context.getSourceCode();var configuration=context.options[0]||{};var ignored=configuration.ignore||[];var customValidators=configuration.customValidators||[];var skipUndeclared=configuration.skipUndeclared||false;// Used to track the type annotations in scope.\n// Necessary because babel's scopes do not track type annotations.\nvar stack=null;var MISSING_MESSAGE='\\'{{name}}\\' is missing in props validation';/**\n     * Helper for accessing the current scope in the stack.\n     * @param {string} key The name of the identifier to access. If omitted, returns the full scope.\n     * @param {ASTNode} value If provided sets the new value for the identifier.\n     * @returns {Object|ASTNode} Either the whole scope or the ASTNode associated with the given identifier.\n     */function typeScope(key,value){if(arguments.length===0){return stack[stack.length-1];}else if(arguments.length===1){return stack[stack.length-1][key];}stack[stack.length-1][key]=value;return value;}/**\n     * Check if we are in a class constructor\n     * @return {boolean} true if we are in a class constructor, false if not\n     */function inConstructor(){var scope=context.getScope();while(scope){if(scope.block&&scope.block.parent&&scope.block.parent.kind==='constructor'){return true;}scope=scope.upper;}return false;}/**\n     * Check if we are in a class constructor\n     * @return {boolean} true if we are in a class constructor, false if not\n     */function inComponentWillReceiveProps(){var scope=context.getScope();while(scope){if(scope.block&&scope.block.parent&&scope.block.parent.key&&scope.block.parent.key.name==='componentWillReceiveProps'){return true;}scope=scope.upper;}return false;}/**\n     * Checks if we are using a prop\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are using a prop, false if not.\n     */function isPropTypesUsage(node){var isClassUsage=(utils.getParentES6Component()||utils.getParentES5Component())&&node.object.type==='ThisExpression'&&node.property.name==='props';var isStatelessFunctionUsage=node.object.name==='props';var isNextPropsUsage=node.object.name==='nextProps'&&inComponentWillReceiveProps();return isClassUsage||isStatelessFunctionUsage||isNextPropsUsage;}/**\n     * Checks if we are declaring a `props` class property with a flow type annotation.\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node is a type annotated props declaration, false if not.\n     */function isAnnotatedClassPropsDeclaration(node){if(node&&node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);if(node.typeAnnotation&&(tokens[0].value==='props'||tokens[1]&&tokens[1].value==='props')){return true;}}return false;}/**\n     * Checks if we are declaring a prop\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are declaring a prop, false if not.\n     */function isPropTypesDeclaration(node){// Special case for class properties\n// (babel-eslint does not expose property name so we have to rely on tokens)\nif(node&&node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);if(tokens[0].value==='propTypes'||tokens[1]&&tokens[1].value==='propTypes'){return true;}return false;}return Boolean(node&&node.name==='propTypes');}/**\n     * Checks if the prop is ignored\n     * @param {String} name Name of the prop to check.\n     * @returns {Boolean} True if the prop is ignored, false if not.\n     */function isIgnored(name){return ignored.indexOf(name)!==-1;}/**\n     * Checks if prop should be validated by plugin-react-proptypes\n     * @param {String} validator Name of validator to check.\n     * @returns {Boolean} True if validator should be checked by custom validator.\n     */function hasCustomValidator(validator){return customValidators.indexOf(validator)!==-1;}/**\n     * Checks if the component must be validated\n     * @param {Object} component The component to process\n     * @returns {Boolean} True if the component must be validated, false if not.\n     */function mustBeValidated(component){var isSkippedByConfig=skipUndeclared&&typeof component.declaredPropTypes==='undefined';return Boolean(component&&component.usedPropTypes&&!component.ignorePropsValidation&&!isSkippedByConfig);}/**\n     * Internal: Checks if the prop is declared\n     * @param {Object} declaredPropTypes Description of propTypes declared in the current component\n     * @param {String[]} keyList Dot separated name of the prop to check.\n     * @returns {Boolean} True if the prop is declared, false if not.\n     */function _isDeclaredInComponent(declaredPropTypes,keyList){for(var i=0,j=keyList.length;i<j;i++){var key=keyList[i];var propType=declaredPropTypes&&(// Check if this key is declared\ndeclaredPropTypes[key]||// If not, check if this type accepts any key\ndeclaredPropTypes.__ANY_KEY__);if(!propType){// If it's a computed property, we can't make any further analysis, but is valid\nreturn key==='__COMPUTED_PROP__';}if(propType===true){return true;}// Consider every children as declared\nif(propType.children===true){return true;}if(propType.acceptedProperties){return key in propType.acceptedProperties;}if(propType.type==='union'){// If we fall in this case, we know there is at least one complex type in the union\nif(i+1>=j){// this is the last key, accept everything\nreturn true;}// non trivial, check all of them\nvar unionTypes=propType.children;var unionPropType={};for(var k=0,z=unionTypes.length;k<z;k++){unionPropType[key]=unionTypes[k];var isValid=_isDeclaredInComponent(unionPropType,keyList.slice(i));if(isValid){return true;}}// every possible union were invalid\nreturn false;}declaredPropTypes=propType.children;}return true;}/**\n     * Checks if the prop is declared\n     * @param {ASTNode} node The AST node being checked.\n     * @param {String[]} names List of names of the prop to check.\n     * @returns {Boolean} True if the prop is declared, false if not.\n     */function isDeclaredInComponent(node,names){while(node){var component=components.get(node);var isDeclared=component&&component.confidence===2&&_isDeclaredInComponent(component.declaredPropTypes||{},names);if(isDeclared){return true;}node=node.parent;}return false;}/**\n     * Checks if the prop has spread operator.\n     * @param {ASTNode} node The AST node being marked.\n     * @returns {Boolean} True if the prop has spread operator, false if not.\n     */function hasSpreadOperator(node){var tokens=sourceCode.getTokens(node);return tokens.length&&tokens[0].value==='...';}/**\n     * Retrieve the name of a key node\n     * @param {ASTNode} node The AST node with the key.\n     * @return {string} the name of the key\n     */function getKeyValue(node){if(node.type==='ObjectTypeProperty'){var tokens=context.getFirstTokens(node,2);return tokens[0].value==='+'||tokens[0].value==='-'?tokens[1].value:tokens[0].value;}var key=node.key||node.argument;return key.type==='Identifier'?key.name:key.value;}/**\n     * Iterates through a properties node, like a customized forEach.\n     * @param {Object[]} properties Array of properties to iterate.\n     * @param {Function} fn Function to call on each property, receives property key\n        and property value. (key, value) => void\n     */function iterateProperties(properties,fn){if(properties.length&&typeof fn==='function'){for(var i=0,j=properties.length;i<j;i++){var node=properties[i];var key=getKeyValue(node);var value=node.value;fn(key,value);}}}/**\n     * Creates the representation of the React propTypes for the component.\n     * The representation is used to verify nested used properties.\n     * @param {ASTNode} value Node of the React.PropTypes for the desired property\n     * @return {Object|Boolean} The representation of the declaration, true means\n     *    the property is declared without the need for further analysis.\n     */function buildReactDeclarationTypes(value){if(value&&value.callee&&value.callee.object&&hasCustomValidator(value.callee.object.name)){return true;}if(value&&value.type==='MemberExpression'&&value.property&&value.property.name&&value.property.name==='isRequired'){value=value.object;}// Verify React.PropTypes that are functions\nif(value&&value.type==='CallExpression'&&value.callee&&value.callee.property&&value.callee.property.name&&value.arguments&&value.arguments.length>0){var callName=value.callee.property.name;var argument=value.arguments[0];switch(callName){case'shape':if(argument.type!=='ObjectExpression'){// Invalid proptype or cannot analyse statically\nreturn true;}var shapeTypeDefinition={type:'shape',children:{}};iterateProperties(argument.properties,function(childKey,childValue){shapeTypeDefinition.children[childKey]=buildReactDeclarationTypes(childValue);});return shapeTypeDefinition;case'arrayOf':case'objectOf':return{type:'object',children:{__ANY_KEY__:buildReactDeclarationTypes(argument)}};case'oneOfType':if(!argument.elements||!argument.elements.length){// Invalid proptype or cannot analyse statically\nreturn true;}var unionTypeDefinition={type:'union',children:[]};for(var i=0,j=argument.elements.length;i<j;i++){var type=buildReactDeclarationTypes(argument.elements[i]);// keep only complex type\nif(type!==true){if(type.children===true){// every child is accepted for one type, abort type analysis\nunionTypeDefinition.children=true;return unionTypeDefinition;}}unionTypeDefinition.children.push(type);}if(unionTypeDefinition.length===0){// no complex type found, simply accept everything\nreturn true;}return unionTypeDefinition;case'instanceOf':return{type:'instance',// Accept all children because we can't know what type they are\nchildren:true};case'oneOf':default:return true;}}// Unknown property or accepts everything (any, object, ...)\nreturn true;}/**\n     * Creates the representation of the React props type annotation for the component.\n     * The representation is used to verify nested used properties.\n     * @param {ASTNode} annotation Type annotation for the props class property.\n     * @return {Object|Boolean} The representation of the declaration, true means\n     *    the property is declared without the need for further analysis.\n     */function buildTypeAnnotationDeclarationTypes(annotation){switch(annotation.type){case'GenericTypeAnnotation':if(typeScope(annotation.id.name)){return buildTypeAnnotationDeclarationTypes(typeScope(annotation.id.name));}return true;case'ObjectTypeAnnotation':var shapeTypeDefinition={type:'shape',children:{}};iterateProperties(annotation.properties,function(childKey,childValue){shapeTypeDefinition.children[childKey]=buildTypeAnnotationDeclarationTypes(childValue);});return shapeTypeDefinition;case'UnionTypeAnnotation':var unionTypeDefinition={type:'union',children:[]};for(var i=0,j=annotation.types.length;i<j;i++){var type=buildTypeAnnotationDeclarationTypes(annotation.types[i]);// keep only complex type\nif(type!==true){if(type.children===true){// every child is accepted for one type, abort type analysis\nunionTypeDefinition.children=true;return unionTypeDefinition;}}unionTypeDefinition.children.push(type);}if(unionTypeDefinition.children.length===0){// no complex type found, simply accept everything\nreturn true;}return unionTypeDefinition;case'ArrayTypeAnnotation':return{type:'object',children:{__ANY_KEY__:buildTypeAnnotationDeclarationTypes(annotation.elementType)}};default:// Unknown or accepts everything.\nreturn true;}}/**\n     * Retrieve the name of a property node\n     * @param {ASTNode} node The AST node with the property.\n     * @return {string} the name of the property or undefined if not found\n     */function getPropertyName(node){var isDirectProp=DIRECT_PROPS_REGEX.test(sourceCode.getText(node));var isInClassComponent=utils.getParentES6Component()||utils.getParentES5Component();var isNotInConstructor=!inConstructor();var isNotInComponentWillReceiveProps=!inComponentWillReceiveProps();if(isDirectProp&&isInClassComponent&&isNotInConstructor&&isNotInComponentWillReceiveProps){return void 0;}if(!isDirectProp){node=node.parent;}var property=node.property;if(property){switch(property.type){case'Identifier':if(node.computed){return'__COMPUTED_PROP__';}return property.name;case'MemberExpression':return void 0;case'Literal':// Accept computed properties that are literal strings\nif(typeof property.value==='string'){return property.value;}// falls through\ndefault:if(node.computed){return'__COMPUTED_PROP__';}break;}}return void 0;}/**\n     * Mark a prop type as used\n     * @param {ASTNode} node The AST node being marked.\n     */function markPropTypesAsUsed(node,parentNames){parentNames=parentNames||[];var type;var name;var allNames;var properties;switch(node.type){case'MemberExpression':name=getPropertyName(node);if(name){allNames=parentNames.concat(name);if(node.parent.type==='MemberExpression'){markPropTypesAsUsed(node.parent,allNames);}// Do not mark computed props as used.\ntype=name!=='__COMPUTED_PROP__'?'direct':null;}else if(node.parent.id&&node.parent.id.properties&&node.parent.id.properties.length&&getKeyValue(node.parent.id.properties[0])){type='destructuring';properties=node.parent.id.properties;}break;case'ArrowFunctionExpression':case'FunctionDeclaration':case'FunctionExpression':type='destructuring';properties=node.params[0].properties;break;case'VariableDeclarator':for(var i=0,j=node.id.properties.length;i<j;i++){// let {props: {firstname}} = this\nvar thisDestructuring=!hasSpreadOperator(node.id.properties[i])&&(PROPS_REGEX.test(node.id.properties[i].key.name)||PROPS_REGEX.test(node.id.properties[i].key.value))&&node.id.properties[i].value.type==='ObjectPattern';// let {firstname} = props\nvar directDestructuring=PROPS_REGEX.test(node.init.name)&&(utils.getParentStatelessComponent()||inConstructor()||inComponentWillReceiveProps());if(thisDestructuring){properties=node.id.properties[i].value.properties;}else if(directDestructuring){properties=node.id.properties;}else{continue;}type='destructuring';break;}break;default:throw new Error(node.type+' ASTNodes are not handled by markPropTypesAsUsed');}var component=components.get(utils.getParentComponent());var usedPropTypes=(component&&component.usedPropTypes||[]).slice();switch(type){case'direct':// Ignore Object methods\nif(Object.prototype[name]){break;}var isDirectProp=DIRECT_PROPS_REGEX.test(sourceCode.getText(node));usedPropTypes.push({name:name,allNames:allNames,node:!isDirectProp&&!inConstructor()&&!inComponentWillReceiveProps()?node.parent.property:node.property});break;case'destructuring':for(var k=0,l=properties.length;k<l;k++){if(hasSpreadOperator(properties[k])||properties[k].computed){continue;}var propName=getKeyValue(properties[k]);var currentNode=node;allNames=[];while(currentNode.property&&!PROPS_REGEX.test(currentNode.property.name)){allNames.unshift(currentNode.property.name);currentNode=currentNode.object;}allNames.push(propName);if(propName){usedPropTypes.push({name:propName,allNames:allNames,node:properties[k]});}}break;default:break;}components.set(node,{usedPropTypes:usedPropTypes});}/**\n     * Mark a prop type as declared\n     * @param {ASTNode} node The AST node being checked.\n     * @param {propTypes} node The AST node containing the proptypes\n     */function markPropTypesAsDeclared(node,propTypes){var componentNode=node;while(componentNode&&!components.get(componentNode)){componentNode=componentNode.parent;}var component=components.get(componentNode);var declaredPropTypes=component&&component.declaredPropTypes||{};var ignorePropsValidation=false;switch(propTypes&&propTypes.type){case'ObjectTypeAnnotation':iterateProperties(propTypes.properties,function(key,value){declaredPropTypes[key]=buildTypeAnnotationDeclarationTypes(value);});break;case'ObjectExpression':iterateProperties(propTypes.properties,function(key,value){if(!value){ignorePropsValidation=true;return;}declaredPropTypes[key]=buildReactDeclarationTypes(value);});break;case'MemberExpression':var curDeclaredPropTypes=declaredPropTypes;// Walk the list of properties, until we reach the assignment\n// ie: ClassX.propTypes.a.b.c = ...\nwhile(propTypes&&propTypes.parent&&propTypes.parent.type!=='AssignmentExpression'&&propTypes.property&&curDeclaredPropTypes){var propName=propTypes.property.name;if(propName in curDeclaredPropTypes){curDeclaredPropTypes=curDeclaredPropTypes[propName].children;propTypes=propTypes.parent;}else{// This will crash at runtime because we haven't seen this key before\n// stop this and do not declare it\npropTypes=null;}}if(propTypes&&propTypes.parent&&propTypes.property){curDeclaredPropTypes[propTypes.property.name]=buildReactDeclarationTypes(propTypes.parent.right);}else{ignorePropsValidation=true;}break;case'Identifier':var variablesInScope=variable.variablesInScope(context);for(var i=0,j=variablesInScope.length;i<j;i++){if(variablesInScope[i].name!==propTypes.name){continue;}var defInScope=variablesInScope[i].defs[variablesInScope[i].defs.length-1];markPropTypesAsDeclared(node,defInScope.node&&defInScope.node.init);return;}ignorePropsValidation=true;break;case null:break;default:ignorePropsValidation=true;break;}components.set(node,{declaredPropTypes:declaredPropTypes,ignorePropsValidation:ignorePropsValidation});}/**\n     * Reports undeclared proptypes for a given component\n     * @param {Object} component The component to process\n     */function reportUndeclaredPropTypes(component){var allNames;for(var i=0,j=component.usedPropTypes.length;i<j;i++){allNames=component.usedPropTypes[i].allNames;if(isIgnored(allNames[0])||isDeclaredInComponent(component.node,allNames)){continue;}context.report(component.usedPropTypes[i].node,MISSING_MESSAGE,{name:allNames.join('.').replace(/\\.__COMPUTED_PROP__/g,'[]')});}}/**\n     * Resolve the type annotation for a given node.\n     * Flow annotations are sometimes wrapped in outer `TypeAnnotation`\n     * and `NullableTypeAnnotation` nodes which obscure the annotation we're\n     * interested in.\n     * This method also resolves type aliases where possible.\n     *\n     * @param {ASTNode} node The annotation or a node containing the type annotation.\n     * @returns {ASTNode} The resolved type annotation for the node.\n     */function resolveTypeAnnotation(node){var annotation=node.typeAnnotation||node;while(annotation&&(annotation.type==='TypeAnnotation'||annotation.type==='NullableTypeAnnotation')){annotation=annotation.typeAnnotation;}if(annotation.type==='GenericTypeAnnotation'&&typeScope(annotation.id.name)){return typeScope(annotation.id.name);}return annotation;}/**\n     * @param {ASTNode} node We expect either an ArrowFunctionExpression,\n     *   FunctionDeclaration, or FunctionExpression\n     */function markDestructuredFunctionArgumentsAsUsed(node){var destructuring=node.params&&node.params[0]&&node.params[0].type==='ObjectPattern';if(destructuring&&components.get(node)){markPropTypesAsUsed(node);}}/**\n     * @param {ASTNode} node We expect either an ArrowFunctionExpression,\n     *   FunctionDeclaration, or FunctionExpression\n     */function markAnnotatedFunctionArgumentsAsDeclared(node){if(!node.params||!node.params.length||!annotations.isAnnotatedFunctionPropsDeclaration(node,context)){return;}markPropTypesAsDeclared(node,resolveTypeAnnotation(node.params[0]));}/**\n     * @param {ASTNode} node We expect either an ArrowFunctionExpression,\n     *   FunctionDeclaration, or FunctionExpression\n     */function handleStatelessComponent(node){markDestructuredFunctionArgumentsAsUsed(node);markAnnotatedFunctionArgumentsAsDeclared(node);}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{ClassProperty:function ClassProperty(node){if(isAnnotatedClassPropsDeclaration(node)){markPropTypesAsDeclared(node,resolveTypeAnnotation(node));}else if(isPropTypesDeclaration(node)){markPropTypesAsDeclared(node,node.value);}},VariableDeclarator:function VariableDeclarator(node){var destructuring=node.init&&node.id&&node.id.type==='ObjectPattern';// let {props: {firstname}} = this\nvar thisDestructuring=destructuring&&node.init.type==='ThisExpression';// let {firstname} = props\nvar directDestructuring=destructuring&&PROPS_REGEX.test(node.init.name)&&(utils.getParentStatelessComponent()||inConstructor()||inComponentWillReceiveProps());if(!thisDestructuring&&!directDestructuring){return;}markPropTypesAsUsed(node);},FunctionDeclaration:handleStatelessComponent,ArrowFunctionExpression:handleStatelessComponent,FunctionExpression:handleStatelessComponent,MemberExpression:function MemberExpression(node){var type;if(isPropTypesUsage(node)){type='usage';}else if(isPropTypesDeclaration(node.property)){type='declaration';}switch(type){case'usage':markPropTypesAsUsed(node);break;case'declaration':var component=utils.getRelatedComponent(node);if(!component){return;}markPropTypesAsDeclared(component.node,node.parent.right||node.parent);break;default:break;}},MethodDefinition:function MethodDefinition(node){if(!isPropTypesDeclaration(node.key)){return;}var i=node.value.body.body.length-1;for(;i>=0;i--){if(node.value.body.body[i].type==='ReturnStatement'){break;}}if(i>=0){markPropTypesAsDeclared(node,node.value.body.body[i].argument);}},ObjectExpression:function ObjectExpression(node){// Search for the proptypes declaration\nnode.properties.forEach(function(property){if(!isPropTypesDeclaration(property.key)){return;}markPropTypesAsDeclared(node,property.value);});},TypeAlias:function TypeAlias(node){typeScope(node.id.name,node.right);},Program:function Program(){stack=[{}];},BlockStatement:function BlockStatement(){stack.push((0,_create4.default)(typeScope()));},'BlockStatement:exit':function BlockStatementExit(){stack.pop();},'Program:exit':function ProgramExit(){stack=null;var list=components.list();// Report undeclared proptypes for all classes\nfor(var component in list){if(!has(list,component)||!mustBeValidated(list[component])){continue;}reportUndeclaredPropTypes(list[component]);}}};})};},{\"../util/Components\":343,\"../util/annotations\":344,\"../util/variable\":347,\"has\":376}],332:[function(require,module,exports){/**\n * @fileoverview Prevent missing React when using JSX\n * @author Glen Mailer\n */'use strict';var variableUtil=require(\"../util/variable\");var pragmaUtil=require(\"../util/pragma\");// -----------------------------------------------------------------------------\n// Rule Definition\n// -----------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent missing React when using JSX',category:'Possible Errors',recommended:true},schema:[]},create:function create(context){var pragma=pragmaUtil.getFromContext(context);var NOT_DEFINED_MESSAGE='\\'{{name}}\\' must be in scope when using JSX';return{JSXOpeningElement:function JSXOpeningElement(node){var variables=variableUtil.variablesInScope(context);if(variableUtil.findVariable(variables,pragma)){return;}context.report({node:node,message:NOT_DEFINED_MESSAGE,data:{name:pragma}});},BlockComment:function BlockComment(node){pragma=pragmaUtil.getFromNode(node)||pragma;}};}};},{\"../util/pragma\":346,\"../util/variable\":347}],333:[function(require,module,exports){/**\n * @fileOverview Enforce a defaultProps definition for every prop that is not a required prop.\n * @author Vitor Balocco\n */'use strict';var has=require(\"has\");var find=require(\"array.prototype.find\");var Components=require(\"../util/Components\");var variableUtil=require(\"../util/variable\");var annotations=require(\"../util/annotations\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce a defaultProps definition for every prop that is not a required prop.',category:'Best Practices'},schema:[]},create:Components.detect(function(context,components,utils){/**\n     * Get properties name\n     * @param {Object} node - Property.\n     * @returns {String} Property name.\n     */function getPropertyName(node){if(node.key||['MethodDefinition','Property'].indexOf(node.type)!==-1){return node.key.name;}else if(node.type==='MemberExpression'){return node.property.name;// Special case for class properties\n// (babel-eslint@5 does not expose property name so we have to rely on tokens)\n}else if(node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);return tokens[1]&&tokens[1].type==='Identifier'?tokens[1].value:tokens[0].value;}return'';}/**\n     * Checks if the Identifier node passed in looks like a propTypes declaration.\n     * @param   {ASTNode}  node The node to check. Must be an Identifier node.\n     * @returns {Boolean}       `true` if the node is a propTypes declaration, `false` if not\n     */function isPropTypesDeclaration(node){return getPropertyName(node)==='propTypes';}/**\n     * Checks if the Identifier node passed in looks like a defaultProps declaration.\n     * @param   {ASTNode}  node The node to check. Must be an Identifier node.\n     * @returns {Boolean}       `true` if the node is a defaultProps declaration, `false` if not\n     */function isDefaultPropsDeclaration(node){return getPropertyName(node)==='defaultProps'||getPropertyName(node)==='getDefaultProps';}/**\n     * Checks if the PropTypes MemberExpression node passed in declares a required propType.\n     * @param   {ASTNode} propTypeExpression node to check. Must be a `PropTypes` MemberExpression.\n     * @returns {Boolean}                    `true` if this PropType is required, `false` if not.\n     */function isRequiredPropType(propTypeExpression){return propTypeExpression.type==='MemberExpression'&&propTypeExpression.property.name==='isRequired';}/**\n     * Find a variable by name in the current scope.\n     * @param  {string} name Name of the variable to look for.\n     * @returns {ASTNode|null} Return null if the variable could not be found, ASTNode otherwise.\n     */function findVariableByName(name){var variable=find(variableUtil.variablesInScope(context),function(item){return item.name===name;});if(!variable||!variable.defs[0]||!variable.defs[0].node){return null;}if(variable.defs[0].node.type==='TypeAlias'){return variable.defs[0].node.right;}return variable.defs[0].node.init;}/**\n     * Try to resolve the node passed in to a variable in the current scope. If the node passed in is not\n     * an Identifier, then the node is simply returned.\n     * @param   {ASTNode} node The node to resolve.\n     * @returns {ASTNode|null} Return null if the value could not be resolved, ASTNode otherwise.\n     */function resolveNodeValue(node){if(node.type==='Identifier'){return findVariableByName(node.name);}return node;}/**\n     * Tries to find the definition of a GenericTypeAnnotation in the current scope.\n     * @param  {ASTNode}      node The node GenericTypeAnnotation node to resolve.\n     * @return {ASTNode|null}      Return null if definition cannot be found, ASTNode otherwise.\n     */function resolveGenericTypeAnnotation(node){if(node.type!=='GenericTypeAnnotation'||node.id.type!=='Identifier'){return null;}return findVariableByName(node.id.name);}function resolveUnionTypeAnnotation(node){// Go through all the union and resolve any generic types.\nreturn node.types.map(function(annotation){if(annotation.type==='GenericTypeAnnotation'){return resolveGenericTypeAnnotation(annotation);}return annotation;});}/**\n     * Extracts a PropType from an ObjectExpression node.\n     * @param   {ASTNode} objectExpression ObjectExpression node.\n     * @returns {Object[]}        Array of PropType object representations, to be consumed by `addPropTypesToComponent`.\n     */function getPropTypesFromObjectExpression(objectExpression){var props=objectExpression.properties.filter(function(property){return property.type!=='ExperimentalSpreadProperty';});return props.map(function(property){return{name:property.key.name,isRequired:isRequiredPropType(property.value),node:property};});}/**\n     * Extracts a PropType from a TypeAnnotation node.\n     * @param   {ASTNode} node TypeAnnotation node.\n     * @returns {Object[]}     Array of PropType object representations, to be consumed by `addPropTypesToComponent`.\n     */function getPropTypesFromTypeAnnotation(node){var properties;switch(node.typeAnnotation.type){case'GenericTypeAnnotation':var annotation=resolveGenericTypeAnnotation(node.typeAnnotation);if(annotation&&annotation.id){annotation=findVariableByName(annotation.id.name);}properties=annotation?annotation.properties||[]:[];break;case'UnionTypeAnnotation':var union=resolveUnionTypeAnnotation(node.typeAnnotation);properties=union.reduce(function(acc,curr){if(!curr){return acc;}return acc.concat(curr.properties);},[]);break;case'ObjectTypeAnnotation':properties=node.typeAnnotation.properties;break;default:properties=[];break;}var props=properties.filter(function(property){return property.type==='ObjectTypeProperty';});return props.map(function(property){// the `key` property is not present in ObjectTypeProperty nodes, so we need to get the key name manually.\nvar tokens=context.getFirstTokens(property,1);var name=tokens[0].value;return{name:name,isRequired:!property.optional,node:property};});}/**\n     * Extracts a DefaultProp from an ObjectExpression node.\n     * @param   {ASTNode} objectExpression ObjectExpression node.\n     * @returns {Object|string}            Object representation of a defaultProp, to be consumed by\n     *                                     `addDefaultPropsToComponent`, or string \"unresolved\", if the defaultProps\n     *                                     from this ObjectExpression can't be resolved.\n     */function getDefaultPropsFromObjectExpression(objectExpression){var hasSpread=find(objectExpression.properties,function(property){return property.type==='ExperimentalSpreadProperty';});if(hasSpread){return'unresolved';}return objectExpression.properties.map(function(property){return property.key.name;});}/**\n     * Marks a component's DefaultProps declaration as \"unresolved\". A component's DefaultProps is\n     * marked as \"unresolved\" if we cannot safely infer the values of its defaultProps declarations\n     * without risking false negatives.\n     * @param   {Object} component The component to mark.\n     * @returns {void}\n     */function markDefaultPropsAsUnresolved(component){components.set(component.node,{defaultProps:'unresolved'});}/**\n     * Adds propTypes to the component passed in.\n     * @param   {ASTNode}  component The component to add the propTypes to.\n     * @param   {Object[]} propTypes propTypes to add to the component.\n     * @returns {void}\n     */function addPropTypesToComponent(component,propTypes){var props=component.propTypes||[];components.set(component.node,{propTypes:props.concat(propTypes)});}/**\n     * Adds defaultProps to the component passed in.\n     * @param   {ASTNode}         component    The component to add the defaultProps to.\n     * @param   {String[]|String} defaultProps defaultProps to add to the component or the string \"unresolved\"\n     *                                         if this component has defaultProps that can't be resolved.\n     * @returns {void}\n     */function addDefaultPropsToComponent(component,defaultProps){// Early return if this component's defaultProps is already marked as \"unresolved\".\nif(component.defaultProps==='unresolved'){return;}if(defaultProps==='unresolved'){markDefaultPropsAsUnresolved(component);return;}var defaults=component.defaultProps||{};defaultProps.forEach(function(defaultProp){defaults[defaultProp]=true;});components.set(component.node,{defaultProps:defaults});}/**\n     * Tries to find a props type annotation in a stateless component.\n     * @param  {ASTNode} node The AST node to look for a props type annotation.\n     * @return {void}\n     */function handleStatelessComponent(node){if(!node.params||!node.params.length||!annotations.isAnnotatedFunctionPropsDeclaration(node,context)){return;}// find component this props annotation belongs to\nvar component=components.get(utils.getParentStatelessComponent());if(!component){return;}addPropTypesToComponent(component,getPropTypesFromTypeAnnotation(node.params[0].typeAnnotation,context));}function handlePropTypeAnnotationClassProperty(node){// find component this props annotation belongs to\nvar component=components.get(utils.getParentES6Component());if(!component){return;}addPropTypesToComponent(component,getPropTypesFromTypeAnnotation(node.typeAnnotation,context));}function isPropTypeAnnotation(node){return getPropertyName(node)==='props'&&!!node.typeAnnotation;}/**\n     * Reports all propTypes passed in that don't have a defaultProp counterpart.\n     * @param  {Object[]} propTypes    List of propTypes to check.\n     * @param  {Object}   defaultProps Object of defaultProps to check. Keys are the props names.\n     * @return {void}\n     */function reportPropTypesWithoutDefault(propTypes,defaultProps){// If this defaultProps is \"unresolved\", then we should ignore this component and not report\n// any errors for it, to avoid false-positives with e.g. external defaultProps declarations or spread operators.\nif(defaultProps==='unresolved'){return;}propTypes.forEach(function(prop){if(prop.isRequired){return;}if(defaultProps[prop.name]){return;}context.report(prop.node,'propType \"{{name}}\" is not required, but has no corresponding defaultProp declaration.',{name:prop.name});});}// --------------------------------------------------------------------------\n// Public API\n// --------------------------------------------------------------------------\nreturn{MemberExpression:function MemberExpression(node){var isPropType=isPropTypesDeclaration(node);var isDefaultProp=isDefaultPropsDeclaration(node);if(!isPropType&&!isDefaultProp){return;}// find component this propTypes/defaultProps belongs to\nvar component=utils.getRelatedComponent(node);if(!component){return;}// e.g.:\n// MyComponent.propTypes = {\n//   foo: React.PropTypes.string.isRequired,\n//   bar: React.PropTypes.string\n// };\n//\n// or:\n//\n// MyComponent.propTypes = myPropTypes;\nif(node.parent.type==='AssignmentExpression'){var expression=resolveNodeValue(node.parent.right);if(!expression||expression.type!=='ObjectExpression'){// If a value can't be found, we mark the defaultProps declaration as \"unresolved\", because\n// we should ignore this component and not report any errors for it, to avoid false-positives\n// with e.g. external defaultProps declarations.\nif(isDefaultProp){markDefaultPropsAsUnresolved(component);}return;}if(isPropType){addPropTypesToComponent(component,getPropTypesFromObjectExpression(expression));}else{addDefaultPropsToComponent(component,getDefaultPropsFromObjectExpression(expression));}return;}// e.g.:\n// MyComponent.propTypes.baz = React.PropTypes.string;\nif(node.parent.type==='MemberExpression'&&node.parent.parent.type==='AssignmentExpression'){if(isPropType){addPropTypesToComponent(component,[{name:node.parent.property.name,isRequired:isRequiredPropType(node.parent.parent.right),node:node.parent.parent}]);}else{addDefaultPropsToComponent(component,[node.parent.property.name]);}return;}},// e.g.:\n// class Hello extends React.Component {\n//   static get propTypes() {\n//     return {\n//       name: React.PropTypes.string\n//     };\n//   }\n//   static get defaultProps() {\n//     return {\n//       name: 'Dean'\n//     };\n//   }\n//   render() {\n//     return <div>Hello {this.props.name}</div>;\n//   }\n// }\nMethodDefinition:function MethodDefinition(node){if(!node.static||node.kind!=='get'){return;}var isPropType=isPropTypesDeclaration(node);var isDefaultProp=isDefaultPropsDeclaration(node);if(!isPropType&&!isDefaultProp){return;}// find component this propTypes/defaultProps belongs to\nvar component=components.get(utils.getParentES6Component());if(!component){return;}var returnStatement=utils.findReturnStatement(node);if(!returnStatement){return;}var expression=resolveNodeValue(returnStatement.argument);if(!expression||expression.type!=='ObjectExpression'){return;}if(isPropType){addPropTypesToComponent(component,getPropTypesFromObjectExpression(expression));}else{addDefaultPropsToComponent(component,getDefaultPropsFromObjectExpression(expression));}},// e.g.:\n// class Greeting extends React.Component {\n//   render() {\n//     return (\n//       <h1>Hello, {this.props.foo} {this.props.bar}</h1>\n//     );\n//   }\n//   static propTypes = {\n//     foo: React.PropTypes.string,\n//     bar: React.PropTypes.string.isRequired\n//   };\n// }\nClassProperty:function ClassProperty(node){if(isPropTypeAnnotation(node)){handlePropTypeAnnotationClassProperty(node);return;}if(!node.static){return;}if(!node.value){return;}var isPropType=getPropertyName(node)==='propTypes';var isDefaultProp=getPropertyName(node)==='defaultProps'||getPropertyName(node)==='getDefaultProps';if(!isPropType&&!isDefaultProp){return;}// find component this propTypes/defaultProps belongs to\nvar component=components.get(utils.getParentES6Component());if(!component){return;}var expression=resolveNodeValue(node.value);if(!expression||expression.type!=='ObjectExpression'){return;}if(isPropType){addPropTypesToComponent(component,getPropTypesFromObjectExpression(expression));}else{addDefaultPropsToComponent(component,getDefaultPropsFromObjectExpression(expression));}},// e.g.:\n// React.createClass({\n//   render: function() {\n//     return <div>{this.props.foo}</div>;\n//   },\n//   propTypes: {\n//     foo: React.PropTypes.string.isRequired,\n//   },\n//   getDefaultProps: function() {\n//     return {\n//       foo: 'default'\n//     };\n//   }\n// });\nObjectExpression:function ObjectExpression(node){// find component this propTypes/defaultProps belongs to\nvar component=utils.isES5Component(node)&&components.get(node);if(!component){return;}// Search for the proptypes declaration\nnode.properties.forEach(function(property){if(property.type==='ExperimentalSpreadProperty'){return;}var isPropType=isPropTypesDeclaration(property);var isDefaultProp=isDefaultPropsDeclaration(property);if(!isPropType&&!isDefaultProp){return;}if(isPropType&&property.value.type==='ObjectExpression'){addPropTypesToComponent(component,getPropTypesFromObjectExpression(property.value));return;}if(isDefaultProp&&property.value.type==='FunctionExpression'){var returnStatement=utils.findReturnStatement(property);if(!returnStatement||returnStatement.argument.type!=='ObjectExpression'){return;}addDefaultPropsToComponent(component,getDefaultPropsFromObjectExpression(returnStatement.argument));}});},// Check for type annotations in stateless components\nFunctionDeclaration:handleStatelessComponent,ArrowFunctionExpression:handleStatelessComponent,FunctionExpression:handleStatelessComponent,'Program:exit':function ProgramExit(){var list=components.list();for(var component in list){if(!has(list,component)){continue;}// If no propTypes could be found, we don't report anything.\nif(!list[component].propTypes){return;}reportPropTypesWithoutDefault(list[component].propTypes,list[component].defaultProps||{});}}};})};},{\"../util/Components\":343,\"../util/annotations\":344,\"../util/variable\":347,\"array.prototype.find\":8,\"has\":376}],334:[function(require,module,exports){(function(process){/**\n * @fileoverview Restrict file extensions that may be required\n * @author Scott Andrews\n * @deprecated\n */'use strict';var path=require(\"path\");var isWarnedForDeprecation=false;// ------------------------------------------------------------------------------\n// Constants\n// ------------------------------------------------------------------------------\nvar DEFAULTS={extensions:['.jsx']};var PKG_REGEX=/^[^\\.]((?!\\/).)*$/;// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{deprecated:true,docs:{description:'Restrict file extensions that may be required',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{extensions:{type:'array',items:{type:'string'}}},additionalProperties:false}]},create:function create(context){function isPackage(id){return PKG_REGEX.test(id);}function isRequire(expression){return expression.callee.name==='require';}function getId(expression){return expression.arguments[0]&&expression.arguments[0].value;}function getExtension(id){return path.extname(id||'');}function getExtensionsConfig(){return context.options[0]&&context.options[0].extensions||DEFAULTS.extensions;}var forbiddenExtensions=getExtensionsConfig().reduce(function(extensions,extension){extensions[extension]=true;return extensions;},(0,_create4.default)(null));function isForbiddenExtension(ext){return ext in forbiddenExtensions;}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){if(isRequire(node)){var id=getId(node);var ext=getExtension(id);if(!isPackage(id)&&isForbiddenExtension(ext)){context.report({node:node,message:'Unable to require module with extension \\''+ext+'\\''});}}},Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The react/require-extension rule is deprecated. Please '+'use the import/extensions rule from eslint-plugin-import instead.');/* eslint-enable no-console */isWarnedForDeprecation=true;}};}};}).call(this,require(\"_process\"));},{\"_process\":594,\"path\":587}],335:[function(require,module,exports){/**\n * @fileoverview Enforce React components to have a shouldComponentUpdate method\n * @author Evgueni Naverniouk\n */'use strict';var has=require(\"has\");var Components=require(\"../util/Components\");module.exports={meta:{docs:{description:'Enforce React components to have a shouldComponentUpdate method',category:'Best Practices',recommended:false},schema:[{type:'object',properties:{allowDecorators:{type:'array',items:{type:'string'}}},additionalProperties:false}]},create:Components.detect(function(context,components,utils){var MISSING_MESSAGE='Component is not optimized. Please add a shouldComponentUpdate method.';var configuration=context.options[0]||{};var allowDecorators=configuration.allowDecorators||[];/**\n     * Checks to see if our component is decorated by PureRenderMixin via reactMixin\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if node is decorated with a PureRenderMixin, false if not.\n     */var hasPureRenderDecorator=function hasPureRenderDecorator(node){if(node.decorators&&node.decorators.length){for(var i=0,l=node.decorators.length;i<l;i++){if(node.decorators[i].expression&&node.decorators[i].expression.callee&&node.decorators[i].expression.callee.object&&node.decorators[i].expression.callee.object.name==='reactMixin'&&node.decorators[i].expression.callee.property&&node.decorators[i].expression.callee.property.name==='decorate'&&node.decorators[i].expression.arguments&&node.decorators[i].expression.arguments.length&&node.decorators[i].expression.arguments[0].name==='PureRenderMixin'){return true;}}}return false;};/**\n     * Checks to see if our component is custom decorated\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if node is decorated name with a custom decorated, false if not.\n     */var hasCustomDecorator=function hasCustomDecorator(node){var allowLength=allowDecorators.length;if(allowLength&&node.decorators&&node.decorators.length){for(var i=0;i<allowLength;i++){for(var j=0,l=node.decorators.length;j<l;j++){if(node.decorators[j].expression&&node.decorators[j].expression.name===allowDecorators[i]){return true;}}}}return false;};/**\n     * Checks if we are declaring a shouldComponentUpdate method\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are declaring a shouldComponentUpdate method, false if not.\n     */var isSCUDeclarеd=function isSCUDeclarеd(node){return Boolean(node&&node.name==='shouldComponentUpdate');};/**\n     * Checks if we are declaring a PureRenderMixin mixin\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if we are declaring a PureRenderMixin method, false if not.\n     */var isPureRenderDeclared=function isPureRenderDeclared(node){var hasPR=false;if(node.value&&node.value.elements){for(var i=0,l=node.value.elements.length;i<l;i++){if(node.value.elements[i].name==='PureRenderMixin'){hasPR=true;break;}}}return Boolean(node&&node.key.name==='mixins'&&hasPR);};/**\n     * Mark shouldComponentUpdate as declared\n     * @param {ASTNode} node The AST node being checked.\n     */var markSCUAsDeclared=function markSCUAsDeclared(node){components.set(node,{hasSCU:true});};/**\n     * Reports missing optimization for a given component\n     * @param {Object} component The component to process\n     */var reportMissingOptimization=function reportMissingOptimization(component){context.report({node:component.node,message:MISSING_MESSAGE,data:{component:component.name}});};/**\n     * Checks if we are declaring function in class\n     * @returns {Boolean} True if we are declaring function in class, false if not.\n     */var isFunctionInClass=function isFunctionInClass(){var blockNode;var scope=context.getScope();while(scope){blockNode=scope.block;if(blockNode&&blockNode.type==='ClassDeclaration'){return true;}scope=scope.upper;}return false;};return{ArrowFunctionExpression:function ArrowFunctionExpression(node){// Stateless Functional Components cannot be optimized (yet)\nmarkSCUAsDeclared(node);},ClassDeclaration:function ClassDeclaration(node){if(!(hasPureRenderDecorator(node)||hasCustomDecorator(node)||utils.isPureComponent(node))){return;}markSCUAsDeclared(node);},FunctionDeclaration:function FunctionDeclaration(node){// Skip if the function is declared in the class\nif(isFunctionInClass()){return;}// Stateless Functional Components cannot be optimized (yet)\nmarkSCUAsDeclared(node);},FunctionExpression:function FunctionExpression(node){// Skip if the function is declared in the class\nif(isFunctionInClass()){return;}// Stateless Functional Components cannot be optimized (yet)\nmarkSCUAsDeclared(node);},MethodDefinition:function MethodDefinition(node){if(!isSCUDeclarеd(node.key)){return;}markSCUAsDeclared(node);},ObjectExpression:function ObjectExpression(node){// Search for the shouldComponentUpdate declaration\nfor(var i=0,l=node.properties.length;i<l;i++){if(!node.properties[i].key||!isSCUDeclarеd(node.properties[i].key)&&!isPureRenderDeclared(node.properties[i])){continue;}markSCUAsDeclared(node);}},'Program:exit':function ProgramExit(){var list=components.list();// Report missing shouldComponentUpdate for all components\nfor(var component in list){if(!has(list,component)||list[component].hasSCU){continue;}reportMissingOptimization(list[component]);}}};})};},{\"../util/Components\":343,\"has\":376}],336:[function(require,module,exports){/**\n * @fileoverview Enforce ES5 or ES6 class for returning value in render function.\n * @author Mark Orel\n */'use strict';var has=require(\"has\");var Components=require(\"../util/Components\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce ES5 or ES6 class for returning value in render function',category:'Possible Errors',recommended:true},schema:[{}]},create:Components.detect(function(context,components,utils){/**\n     * Mark a return statement as present\n     * @param {ASTNode} node The AST node being checked.\n     */function markReturnStatementPresent(node){components.set(node,{hasReturnStatement:true});}/**\n     * Get properties for a given AST node\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Array} Properties array.\n     */function getComponentProperties(node){switch(node.type){case'ClassDeclaration':return node.body.body;case'ObjectExpression':return node.properties;default:return[];}}/**\n     * Get properties name\n     * @param {Object} node - Property.\n     * @returns {String} Property name.\n     */function getPropertyName(node){// Special case for class properties\n// (babel-eslint does not expose property name so we have to rely on tokens)\nif(node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);return tokens[1]&&tokens[1].type==='Identifier'?tokens[1].value:tokens[0].value;}else if(['MethodDefinition','Property'].indexOf(node.type)!==-1){return node.key.name;}return'';}/**\n     * Check if a given AST node has a render method\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if there is a render method, false if not\n     */function hasRenderMethod(node){var properties=getComponentProperties(node);for(var i=0,j=properties.length;i<j;i++){if(getPropertyName(properties[i])!=='render'||!properties[i].value){continue;}return /FunctionExpression$/.test(properties[i].value.type);}return false;}return{ReturnStatement:function ReturnStatement(node){var ancestors=context.getAncestors(node).reverse();var depth=0;for(var i=0,j=ancestors.length;i<j;i++){if(/Function(Expression|Declaration)$/.test(ancestors[i].type)){depth++;}if(!/(MethodDefinition|(Class)?Property)$/.test(ancestors[i].type)||getPropertyName(ancestors[i])!=='render'||depth>1){continue;}markReturnStatementPresent(node);}},ArrowFunctionExpression:function ArrowFunctionExpression(node){if(node.expression===false||getPropertyName(node.parent)!=='render'){return;}markReturnStatementPresent(node);},'Program:exit':function ProgramExit(){var list=components.list();for(var component in list){if(!has(list,component)||!hasRenderMethod(list[component].node)||list[component].hasReturnStatement||!utils.isES5Component(list[component].node)&&!utils.isES6Component(list[component].node)){continue;}context.report({node:list[component].node,message:'Your render method should have return statement'});}}};})};},{\"../util/Components\":343,\"has\":376}],337:[function(require,module,exports){/**\n * @fileoverview Prevent extra closing tags for components without children\n * @author Yannick Croissant\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent extra closing tags for components without children',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{type:'object',properties:{component:{default:true,type:'boolean'},html:{default:true,type:'boolean'}},additionalProperties:false}]},create:function create(context){var tagConvention=/^[a-z]|\\-/;function isTagName(name){return tagConvention.test(name);}function isComponent(node){return node.name&&node.name.type==='JSXIdentifier'&&!isTagName(node.name.name);}function hasChildren(node){var childrens=node.parent.children;if(!childrens.length||childrens.length===1&&childrens[0].type==='Literal'&&!childrens[0].value.replace(/(?!\\xA0)\\s/g,'')){return false;}return true;}function isShouldBeSelfClosed(node){var configuration=context.options[0]||{component:true,html:true};return(configuration.component&&isComponent(node)||configuration.html&&isTagName(node.name.name))&&!node.selfClosing&&!hasChildren(node);}// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nreturn{JSXOpeningElement:function JSXOpeningElement(node){if(!isShouldBeSelfClosed(node)){return;}context.report({node:node,message:'Empty components are self-closing',fix:function fix(fixer){// Represents the last character of the JSXOpeningElement, the '>' character\nvar openingElementEnding=node.end-1;// Represents the last character of the JSXClosingElement, the '>' character\nvar closingElementEnding=node.parent.closingElement.end;// Replace />.*<\\/.*>/ with '/>'\nvar range=[openingElementEnding,closingElementEnding];return fixer.replaceTextRange(range,' />');}});}};}};},{}],338:[function(require,module,exports){/**\n * @fileoverview Enforce component methods order\n * @author Yannick Croissant\n */'use strict';var has=require(\"has\");var util=require(\"util\");var Components=require(\"../util/Components\");/**\n * Get the methods order from the default config and the user config\n * @param {Object} defaultConfig The default configuration.\n * @param {Object} userConfig The user configuration.\n * @returns {Array} Methods order\n */function getMethodsOrder(defaultConfig,userConfig){userConfig=userConfig||{};var groups=util._extend(defaultConfig.groups,userConfig.groups);var order=userConfig.order||defaultConfig.order;var config=[];var entry;for(var i=0,j=order.length;i<j;i++){entry=order[i];if(has(groups,entry)){config=config.concat(groups[entry]);}else{config.push(entry);}}return config;}// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce component methods order',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{order:{type:'array',items:{type:'string'}},groups:{type:'object',patternProperties:{'^.*$':{type:'array',items:{type:'string'}}}}},additionalProperties:false}]},create:Components.detect(function(context,components){var errors={};var MISPOSITION_MESSAGE='{{propA}} should be placed {{position}} {{propB}}';var methodsOrder=getMethodsOrder({order:['static-methods','lifecycle','everything-else','render'],groups:{lifecycle:['displayName','propTypes','contextTypes','childContextTypes','mixins','statics','defaultProps','constructor','getDefaultProps','state','getInitialState','getChildContext','componentWillMount','componentDidMount','componentWillReceiveProps','shouldComponentUpdate','componentWillUpdate','componentDidUpdate','componentWillUnmount']}},context.options[0]);// --------------------------------------------------------------------------\n// Public\n// --------------------------------------------------------------------------\nvar regExpRegExp=/\\/(.*)\\/([g|y|i|m]*)/;/**\n     * Get indexes of the matching patterns in methods order configuration\n     * @param {Object} method - Method metadata.\n     * @returns {Array} The matching patterns indexes. Return [Infinity] if there is no match.\n     */function getRefPropIndexes(method){var isRegExp;var matching;var i;var j;var indexes=[];if(method.static){for(i=0,j=methodsOrder.length;i<j;i++){if(methodsOrder[i]==='static-methods'){indexes.push(i);break;}}}if(method.typeAnnotation){for(i=0,j=methodsOrder.length;i<j;i++){if(methodsOrder[i]==='type-annotations'){indexes.push(i);break;}}}// Either this is not a static method or static methods are not specified\n// in the methodsOrder.\nif(indexes.length===0){for(i=0,j=methodsOrder.length;i<j;i++){isRegExp=methodsOrder[i].match(regExpRegExp);if(isRegExp){matching=new RegExp(isRegExp[1],isRegExp[2]).test(method.name);}else{matching=methodsOrder[i]===method.name;}if(matching){indexes.push(i);}}}// No matching pattern, return 'everything-else' index\nif(indexes.length===0){for(i=0,j=methodsOrder.length;i<j;i++){if(methodsOrder[i]==='everything-else'){indexes.push(i);break;}}}// No matching pattern and no 'everything-else' group\nif(indexes.length===0){indexes.push(Infinity);}return indexes;}/**\n     * Get properties name\n     * @param {Object} node - Property.\n     * @returns {String} Property name.\n     */function getPropertyName(node){// Special case for class properties\n// (babel-eslint does not expose property name so we have to rely on tokens)\nif(node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);return tokens[1]&&tokens[1].type==='Identifier'?tokens[1].value:tokens[0].value;}return node.key.name;}/**\n     * Store a new error in the error list\n     * @param {Object} propA - Mispositioned property.\n     * @param {Object} propB - Reference property.\n     */function storeError(propA,propB){// Initialize the error object if needed\nif(!errors[propA.index]){errors[propA.index]={node:propA.node,score:0,closest:{distance:Infinity,ref:{node:null,index:0}}};}// Increment the prop score\nerrors[propA.index].score++;// Stop here if we already have pushed another node at this position\nif(getPropertyName(errors[propA.index].node)!==getPropertyName(propA.node)){return;}// Stop here if we already have a closer reference\nif(Math.abs(propA.index-propB.index)>errors[propA.index].closest.distance){return;}// Update the closest reference\nerrors[propA.index].closest.distance=Math.abs(propA.index-propB.index);errors[propA.index].closest.ref.node=propB.node;errors[propA.index].closest.ref.index=propB.index;}/**\n     * Dedupe errors, only keep the ones with the highest score and delete the others\n     */function dedupeErrors(){for(var i in errors){if(!has(errors,i)){continue;}var index=errors[i].closest.ref.index;if(!errors[index]){continue;}if(errors[i].score>errors[index].score){delete errors[index];}else{delete errors[i];}}}/**\n     * Report errors\n     */function reportErrors(){dedupeErrors();var nodeA;var nodeB;var indexA;var indexB;for(var i in errors){if(!has(errors,i)){continue;}nodeA=errors[i].node;nodeB=errors[i].closest.ref.node;indexA=i;indexB=errors[i].closest.ref.index;context.report({node:nodeA,message:MISPOSITION_MESSAGE,data:{propA:getPropertyName(nodeA),propB:getPropertyName(nodeB),position:indexA<indexB?'before':'after'}});}}/**\n     * Get properties for a given AST node\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Array} Properties array.\n     */function getComponentProperties(node){switch(node.type){case'ClassDeclaration':return node.body.body;case'ObjectExpression':return node.properties.filter(function(property){return property.type==='Property';});default:return[];}}/**\n     * Compare two properties and find out if they are in the right order\n     * @param {Array} propertiesInfos Array containing all the properties metadata.\n     * @param {Object} propA First property name and metadata\n     * @param {Object} propB Second property name.\n     * @returns {Object} Object containing a correct true/false flag and the correct indexes for the two properties.\n     */function comparePropsOrder(propertiesInfos,propA,propB){var i;var j;var k;var l;var refIndexA;var refIndexB;// Get references indexes (the correct position) for given properties\nvar refIndexesA=getRefPropIndexes(propA);var refIndexesB=getRefPropIndexes(propB);// Get current indexes for given properties\nvar classIndexA=propertiesInfos.indexOf(propA);var classIndexB=propertiesInfos.indexOf(propB);// Loop around the references indexes for the 1st property\nfor(i=0,j=refIndexesA.length;i<j;i++){refIndexA=refIndexesA[i];// Loop around the properties for the 2nd property (for comparison)\nfor(k=0,l=refIndexesB.length;k<l;k++){refIndexB=refIndexesB[k];if(// Comparing the same properties\nrefIndexA===refIndexB||// 1st property is placed before the 2nd one in reference and in current component\nrefIndexA<refIndexB&&classIndexA<classIndexB||// 1st property is placed after the 2nd one in reference and in current component\nrefIndexA>refIndexB&&classIndexA>classIndexB){return{correct:true,indexA:classIndexA,indexB:classIndexB};}}}// We did not find any correct match between reference and current component\nreturn{correct:false,indexA:refIndexA,indexB:refIndexB};}/**\n     * Check properties order from a properties list and store the eventual errors\n     * @param {Array} properties Array containing all the properties.\n     */function checkPropsOrder(properties){var propertiesInfos=properties.map(function(node){return{name:getPropertyName(node),static:node.static,typeAnnotation:!!node.typeAnnotation&&node.value===null};});var i;var j;var k;var l;var propA;var propB;var order;// Loop around the properties\nfor(i=0,j=propertiesInfos.length;i<j;i++){propA=propertiesInfos[i];// Loop around the properties a second time (for comparison)\nfor(k=0,l=propertiesInfos.length;k<l;k++){propB=propertiesInfos[k];// Compare the properties order\norder=comparePropsOrder(propertiesInfos,propA,propB);// Continue to next comparison is order is correct\nif(order.correct===true){continue;}// Store an error if the order is incorrect\nstoreError({node:properties[i],index:order.indexA},{node:properties[k],index:order.indexB});}}}return{'Program:exit':function ProgramExit(){var list=components.list();for(var component in list){if(!has(list,component)){continue;}var properties=getComponentProperties(list[component].node);checkPropsOrder(properties);}reportErrors();}};})};},{\"../util/Components\":343,\"has\":376,\"util\":602}],339:[function(require,module,exports){/**\n * @fileoverview Enforce propTypes declarations alphabetical sorting\n */'use strict';var find=require(\"array.prototype.find\");var variableUtil=require(\"../util/variable\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce propTypes declarations alphabetical sorting',category:'Stylistic Issues',recommended:false},schema:[{type:'object',properties:{requiredFirst:{type:'boolean'},callbacksLast:{type:'boolean'},ignoreCase:{type:'boolean'}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();var configuration=context.options[0]||{};var requiredFirst=configuration.requiredFirst||false;var callbacksLast=configuration.callbacksLast||false;var ignoreCase=configuration.ignoreCase||false;/**\n     * Checks if node is `propTypes` declaration\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if node is `propTypes` declaration, false if not.\n     */function isPropTypesDeclaration(node){// Special case for class properties\n// (babel-eslint does not expose property name so we have to rely on tokens)\nif(node.type==='ClassProperty'){var tokens=context.getFirstTokens(node,2);return tokens[0]&&tokens[0].value==='propTypes'||tokens[1]&&tokens[1].value==='propTypes';}return Boolean(node&&node.name==='propTypes');}function getKey(node){return sourceCode.getText(node.key||node.argument);}function getValueName(node){return node.type==='Property'&&node.value.property&&node.value.property.name;}function isCallbackPropName(propName){return /^on[A-Z]/.test(propName);}function isRequiredProp(node){return getValueName(node)==='isRequired';}/**\n     * Checks if propTypes declarations are sorted\n     * @param {Array} declarations The array of AST nodes being checked.\n     * @returns {void}\n     */function checkSorted(declarations){declarations.reduce(function(prev,curr,idx,decls){if(/SpreadProperty$/.test(curr.type)){return decls[idx+1];}var prevPropName=getKey(prev);var currentPropName=getKey(curr);var previousIsRequired=isRequiredProp(prev);var currentIsRequired=isRequiredProp(curr);var previousIsCallback=isCallbackPropName(prevPropName);var currentIsCallback=isCallbackPropName(currentPropName);if(ignoreCase){prevPropName=prevPropName.toLowerCase();currentPropName=currentPropName.toLowerCase();}if(requiredFirst){if(previousIsRequired&&!currentIsRequired){// Transition between required and non-required. Don't compare for alphabetical.\nreturn curr;}if(!previousIsRequired&&currentIsRequired){// Encountered a non-required prop after a required prop\ncontext.report({node:curr,message:'Required prop types must be listed before all other prop types'});return curr;}}if(callbacksLast){if(!previousIsCallback&&currentIsCallback){// Entering the callback prop section\nreturn curr;}if(previousIsCallback&&!currentIsCallback){// Encountered a non-callback prop after a callback prop\ncontext.report({node:prev,message:'Callback prop types must be listed after all other prop types'});return prev;}}if(currentPropName<prevPropName){context.report({node:curr,message:'Prop types declarations should be sorted alphabetically'});return prev;}return curr;},declarations[0]);}return{ClassProperty:function ClassProperty(node){if(isPropTypesDeclaration(node)&&node.value&&node.value.type==='ObjectExpression'){checkSorted(node.value.properties);}},MemberExpression:function MemberExpression(node){if(!isPropTypesDeclaration(node.property)){return;}var right=node.parent.right;var declarations;switch(right&&right.type){case'ObjectExpression':declarations=right.properties;break;case'Identifier':var variable=find(variableUtil.variablesInScope(context),function(item){return item.name===right.name;});if(!variable||!variable.defs[0]||!variable.defs[0].node.init||!variable.defs[0].node.init.properties){break;}declarations=variable.defs[0].node.init.properties;break;default:break;}if(declarations){checkSorted(declarations);}},ObjectExpression:function ObjectExpression(node){node.properties.forEach(function(property){if(!property.key){return;}if(!isPropTypesDeclaration(property.key)){return;}if(property.value.type==='ObjectExpression'){checkSorted(property.value.properties);}});}};}};},{\"../util/variable\":347,\"array.prototype.find\":8}],340:[function(require,module,exports){/**\n * @fileoverview Enforce style prop value is an object\n * @author David Petersen\n */'use strict';var find=require(\"array.prototype.find\");var variableUtil=require(\"../util/variable\");// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Enforce style prop value is an object',category:'',recommended:false},schema:[]},create:function create(context){/**\n     * @param {object} node An Identifier node\n     */function isNonNullaryLiteral(expression){return expression.type==='Literal'&&expression.value!==null;}/**\n     * @param {object} node A Identifier node\n     */function checkIdentifiers(node){var variable=find(variableUtil.variablesInScope(context),function(item){return item.name===node.name;});if(!variable||!variable.defs[0]||!variable.defs[0].node.init){return;}if(isNonNullaryLiteral(variable.defs[0].node.init)){context.report(node,'Style prop value must be an object');}}return{CallExpression:function CallExpression(node){if(node.callee&&node.callee.type==='MemberExpression'&&node.callee.property.name==='createElement'&&node.arguments.length>1){if(node.arguments[1].type==='ObjectExpression'){var style=find(node.arguments[1].properties,function(property){return property.key&&property.key.name==='style'&&!property.computed;});if(style){if(style.value.type==='Identifier'){checkIdentifiers(style.value);}else if(isNonNullaryLiteral(style.value)){context.report(style.value,'Style prop value must be an object');}}}}},JSXAttribute:function JSXAttribute(node){if(!node.value||node.name.name!=='style'){return;}if(node.value.type!=='JSXExpressionContainer'||isNonNullaryLiteral(node.value.expression)){context.report(node,'Style prop value must be an object');}else if(node.value.expression.type==='Identifier'){checkIdentifiers(node.value.expression);}}};}};},{\"../util/variable\":347,\"array.prototype.find\":8}],341:[function(require,module,exports){/**\n * @fileoverview Prevent void elements (e.g. <img />, <br />) from receiving\n *   children\n * @author Joe Lencioni\n */'use strict';var find=require(\"array.prototype.find\");var has=require(\"has\");// ------------------------------------------------------------------------------\n// Helpers\n// ------------------------------------------------------------------------------\n// Using an object here to avoid array scan. We should switch to Set once\n// support is good enough.\nvar VOID_DOM_ELEMENTS={area:true,base:true,br:true,col:true,embed:true,hr:true,img:true,input:true,keygen:true,link:true,menuitem:true,meta:true,param:true,source:true,track:true,wbr:true};function isVoidDOMElement(elementName){return has(VOID_DOM_ELEMENTS,elementName);}function errorMessage(elementName){return'Void DOM element <'+elementName+' /> cannot receive children.';}// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:'Prevent passing of children to void DOM elements (e.g. <br />).',category:'Best Practices',recommended:false},schema:[]},create:function create(context){return{JSXElement:function JSXElement(node){var elementName=node.openingElement.name.name;if(!isVoidDOMElement(elementName)){// e.g. <div />\nreturn;}if(node.children.length>0){// e.g. <br>Foo</br>\ncontext.report({node:node,message:errorMessage(elementName)});}var attributes=node.openingElement.attributes;var hasChildrenAttributeOrDanger=!!find(attributes,function(attribute){if(!attribute.name){return false;}return attribute.name.name==='children'||attribute.name.name==='dangerouslySetInnerHTML';});if(hasChildrenAttributeOrDanger){// e.g. <br children=\"Foo\" />\ncontext.report({node:node,message:errorMessage(elementName)});}},CallExpression:function CallExpression(node){if(node.callee.type!=='MemberExpression'){return;}if(node.callee.property.name!=='createElement'){return;}var args=node.arguments;var elementName=args[0].value;if(!isVoidDOMElement(elementName)){// e.g. React.createElement('div');\nreturn;}var firstChild=args[2];if(firstChild){// e.g. React.createElement('br', undefined, 'Foo')\ncontext.report({node:node,message:errorMessage(elementName)});}var props=args[1].properties;var hasChildrenPropOrDanger=!!find(props,function(prop){if(!prop.key){return false;}return prop.key.name==='children'||prop.key.name==='dangerouslySetInnerHTML';});if(hasChildrenPropOrDanger){// e.g. React.createElement('br', { children: 'Foo' })\ncontext.report({node:node,message:errorMessage(elementName)});}}};}};},{\"array.prototype.find\":8,\"has\":376}],342:[function(require,module,exports){(function(process){/**\n * @fileoverview Prevent missing parentheses around multilines JSX\n * @author Yannick Croissant\n * @deprecated\n */'use strict';// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\nvar util=require(\"util\");var jsxWrapMultilines=require(\"./jsx-wrap-multilines\");var isWarnedForDeprecation=false;module.exports={meta:{deprecated:true,docs:{description:'Prevent missing parentheses around multilines JSX',category:'Stylistic Issues',recommended:false},fixable:'code',schema:[{type:'object',properties:{declaration:{type:'boolean'},assignment:{type:'boolean'},return:{type:'boolean'}},additionalProperties:false}]},create:function create(context){return util._extend(jsxWrapMultilines.create(context),{Program:function Program(){if(isWarnedForDeprecation||/\\=-(f|-format)=/.test(process.argv.join('='))){return;}/* eslint-disable no-console */console.log('The react/wrap-multilines rule is deprecated. Please '+'use the react/jsx-wrap-multilines rule instead.');/* eslint-enable no-console */isWarnedForDeprecation=true;}});}};}).call(this,require(\"_process\"));},{\"./jsx-wrap-multilines\":310,\"_process\":594,\"util\":602}],343:[function(require,module,exports){/**\n * @fileoverview Utility class and functions for React components detection\n * @author Yannick Croissant\n */'use strict';var has=require(\"has\");var util=require(\"util\");var doctrine=require(\"doctrine\");var variableUtil=require(\"./variable\");var pragmaUtil=require(\"./pragma\");/**\n * Components\n * @class\n */function Components(){this._list={};this._getId=function(node){return node&&node.range.join(':');};}/**\n * Add a node to the components list, or update it if it's already in the list\n *\n * @param {ASTNode} node The AST node being added.\n * @param {Number} confidence Confidence in the component detection (0=banned, 1=maybe, 2=yes)\n * @returns {Object} Added component object\n */Components.prototype.add=function(node,confidence){var id=this._getId(node);if(this._list[id]){if(confidence===0||this._list[id].confidence===0){this._list[id].confidence=0;}else{this._list[id].confidence=Math.max(this._list[id].confidence,confidence);}return this._list[id];}this._list[id]={node:node,confidence:confidence};return this._list[id];};/**\n * Find a component in the list using its node\n *\n * @param {ASTNode} node The AST node being searched.\n * @returns {Object} Component object, undefined if the component is not found\n */Components.prototype.get=function(node){var id=this._getId(node);return this._list[id];};/**\n * Update a component in the list\n *\n * @param {ASTNode} node The AST node being updated.\n * @param {Object} props Additional properties to add to the component.\n */Components.prototype.set=function(node,props){while(node&&!this._list[this._getId(node)]){node=node.parent;}if(!node){return;}var id=this._getId(node);this._list[id]=util._extend(this._list[id],props);};/**\n * Return the components list\n * Components for which we are not confident are not returned\n *\n * @returns {Object} Components list\n */Components.prototype.list=function(){var list={};var usedPropTypes={};// Find props used in components for which we are not confident\nfor(var i in this._list){if(!has(this._list,i)||this._list[i].confidence>=2){continue;}var component=null;var node=null;node=this._list[i].node;while(!component&&node.parent){node=node.parent;// Stop moving up if we reach a decorator\nif(node.type==='Decorator'){break;}component=this.get(node);}if(component){usedPropTypes[this._getId(component.node)]=(this._list[i].usedPropTypes||[]).filter(function(propType){return!propType.node||propType.node.kind!=='init';});}}// Assign used props in not confident components to the parent component\nfor(var j in this._list){if(!has(this._list,j)||this._list[j].confidence<2){continue;}var id=this._getId(this._list[j].node);list[j]=this._list[j];if(usedPropTypes[id]){list[j].usedPropTypes=(list[j].usedPropTypes||[]).concat(usedPropTypes[id]);}}return list;};/**\n * Return the length of the components list\n * Components for which we are not confident are not counted\n *\n * @returns {Number} Components list length\n */Components.prototype.length=function(){var length=0;for(var i in this._list){if(!has(this._list,i)||this._list[i].confidence<2){continue;}length++;}return length;};function componentRule(rule,context){var createClass=pragmaUtil.getCreateClassFromContext(context);var pragma=pragmaUtil.getFromContext(context);var sourceCode=context.getSourceCode();var components=new Components();// Utilities for component detection\nvar utils={/**\n     * Check if the node is a React ES5 component\n     *\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node is a React ES5 component, false if not\n     */isES5Component:function isES5Component(node){if(!node.parent){return false;}return new RegExp('^('+pragma+'\\\\.)?'+createClass+'$').test(sourceCode.getText(node.parent.callee));},/**\n     * Check if the node is a React ES6 component\n     *\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if the node is a React ES6 component, false if not\n     */isES6Component:function isES6Component(node){if(utils.isExplicitComponent(node)){return true;}if(!node.superClass){return false;}return new RegExp('^('+pragma+'\\\\.)?(Pure)?Component$').test(sourceCode.getText(node.superClass));},/**\n     * Check if the node is explicitly declared as a descendant of a React Component\n     *\n     * @param {ASTNode} node The AST node being checked (can be a ReturnStatement or an ArrowFunctionExpression).\n     * @returns {Boolean} True if the node is explicitly declared as a descendant of a React Component, false if not\n     */isExplicitComponent:function isExplicitComponent(node){var comment=sourceCode.getJSDocComment(node);if(comment===null){return false;}var commentAst=doctrine.parse(comment.value,{unwrap:true,tags:['extends','augments']});var relevantTags=commentAst.tags.filter(function(tag){return tag.name==='React.Component'||tag.name==='React.PureComponent';});return relevantTags.length>0;},/**\n     * Checks to see if our component extends React.PureComponent\n     *\n     * @param {ASTNode} node The AST node being checked.\n     * @returns {Boolean} True if node extends React.PureComponent, false if not\n     */isPureComponent:function isPureComponent(node){if(node.superClass){return new RegExp('^('+pragma+'\\\\.)?PureComponent$').test(sourceCode.getText(node.superClass));}return false;},/**\n     * Check if the node is returning JSX\n     *\n     * @param {ASTNode} ASTnode The AST node being checked\n     * @param {Boolean} strict If true, in a ternary condition the node must return JSX in both cases\n     * @returns {Boolean} True if the node is returning JSX, false if not\n     */isReturningJSX:function isReturningJSX(ASTnode,strict){var property;var node=ASTnode;switch(node.type){case'ReturnStatement':property='argument';break;case'ArrowFunctionExpression':property='body';break;default:node=utils.findReturnStatement(node);if(!node){return false;}property='argument';}var returnsConditionalJSXConsequent=node[property]&&node[property].type==='ConditionalExpression'&&node[property].consequent.type==='JSXElement';var returnsConditionalJSXAlternate=node[property]&&node[property].type==='ConditionalExpression'&&node[property].alternate.type==='JSXElement';var returnsConditionalJSX=strict?returnsConditionalJSXConsequent&&returnsConditionalJSXAlternate:returnsConditionalJSXConsequent||returnsConditionalJSXAlternate;var returnsJSX=node[property]&&node[property].type==='JSXElement';var destructuredReactCreateElement=function destructuredReactCreateElement(){var variables=variableUtil.variablesInScope(context);var variable=variableUtil.getVariable(variables,'createElement');if(variable){var map=variable.scope.set;if(map.has('React')){return true;}}return false;};var returnsReactCreateElement=destructuredReactCreateElement()||node[property]&&node[property].callee&&node[property].callee.object&&node[property].callee.object.name==='React'&&node[property].callee.property&&node[property].callee.property.name==='createElement';return Boolean(returnsConditionalJSX||returnsJSX||returnsReactCreateElement);},/**\n     * Find a return statment in the current node\n     *\n     * @param {ASTNode} ASTnode The AST node being checked\n     */findReturnStatement:function findReturnStatement(node){if(!node.value||!node.value.body||!node.value.body.body){return false;}var i=node.value.body.body.length-1;for(;i>=0;i--){if(node.value.body.body[i].type==='ReturnStatement'){return node.value.body.body[i];}}return false;},/**\n     * Get the parent component node from the current scope\n     *\n     * @returns {ASTNode} component node, null if we are not in a component\n     */getParentComponent:function getParentComponent(){return utils.getParentES6Component()||utils.getParentES5Component()||utils.getParentStatelessComponent();},/**\n     * Get the parent ES5 component node from the current scope\n     *\n     * @returns {ASTNode} component node, null if we are not in a component\n     */getParentES5Component:function getParentES5Component(){var scope=context.getScope();while(scope){var node=scope.block&&scope.block.parent&&scope.block.parent.parent;if(node&&utils.isES5Component(node)){return node;}scope=scope.upper;}return null;},/**\n     * Get the parent ES6 component node from the current scope\n     *\n     * @returns {ASTNode} component node, null if we are not in a component\n     */getParentES6Component:function getParentES6Component(){var scope=context.getScope();while(scope&&scope.type!=='class'){scope=scope.upper;}var node=scope&&scope.block;if(!node||!utils.isES6Component(node)){return null;}return node;},/**\n     * Get the parent stateless component node from the current scope\n     *\n     * @returns {ASTNode} component node, null if we are not in a component\n     */getParentStatelessComponent:function getParentStatelessComponent(){var scope=context.getScope();while(scope){var node=scope.block;var isClass=node.type==='ClassExpression';var isFunction=/Function/.test(node.type);// Functions\nvar isMethod=node.parent&&node.parent.type==='MethodDefinition';// Classes methods\nvar isArgument=node.parent&&node.parent.type==='CallExpression';// Arguments (callback, etc.)\n// Attribute Expressions inside JSX Elements (<button onClick={() => props.handleClick()}></button>)\nvar isJSXExpressionContainer=node.parent&&node.parent.type==='JSXExpressionContainer';// Stop moving up if we reach a class or an argument (like a callback)\nif(isClass||isArgument){return null;}// Return the node if it is a function that is not a class method and is not inside a JSX Element\nif(isFunction&&!isMethod&&!isJSXExpressionContainer){return node;}scope=scope.upper;}return null;},/**\n     * Get the related component from a node\n     *\n     * @param {ASTNode} node The AST node being checked (must be a MemberExpression).\n     * @returns {ASTNode} component node, null if we cannot find the component\n     */getRelatedComponent:function getRelatedComponent(node){var i;var j;var k;var l;var componentName;var componentNode;// Get the component path\nvar componentPath=[];while(node){if(node.property&&node.property.type==='Identifier'){componentPath.push(node.property.name);}if(node.object&&node.object.type==='Identifier'){componentPath.push(node.object.name);}node=node.object;}componentPath.reverse();componentName=componentPath.slice(0,componentPath.length-1).join('.');// Find the variable in the current scope\nvar variableName=componentPath.shift();if(!variableName){return null;}var variableInScope;var variables=variableUtil.variablesInScope(context);for(i=0,j=variables.length;i<j;i++){if(variables[i].name===variableName){variableInScope=variables[i];break;}}if(!variableInScope){return null;}// Try to find the component using variable references\nvar refs=variableInScope.references;var refId;for(i=0,j=refs.length;i<j;i++){refId=refs[i].identifier;if(refId.parent&&refId.parent.type==='MemberExpression'){refId=refId.parent;}if(sourceCode.getText(refId)!==componentName){continue;}if(refId.type==='MemberExpression'){componentNode=refId.parent.right;}else if(refId.parent&&refId.parent.type==='VariableDeclarator'){componentNode=refId.parent.init;}break;}if(componentNode){// Return the component\nreturn components.add(componentNode,1);}// Try to find the component using variable declarations\nvar defInScope;var defs=variableInScope.defs;for(i=0,j=defs.length;i<j;i++){if(defs[i].type==='ClassName'||defs[i].type==='FunctionName'||defs[i].type==='Variable'){defInScope=defs[i];break;}}if(!defInScope||!defInScope.node){return null;}componentNode=defInScope.node.init||defInScope.node;// Traverse the node properties to the component declaration\nfor(i=0,j=componentPath.length;i<j;i++){if(!componentNode.properties){continue;}for(k=0,l=componentNode.properties.length;k<l;k++){if(componentNode.properties[k].key.name===componentPath[i]){componentNode=componentNode.properties[k];break;}}if(!componentNode||!componentNode.value){return null;}componentNode=componentNode.value;}// Return the component\nreturn components.add(componentNode,1);}};// Component detection instructions\nvar detectionInstructions={ClassExpression:function ClassExpression(node){if(!utils.isES6Component(node)){return;}components.add(node,2);},ClassDeclaration:function ClassDeclaration(node){if(!utils.isES6Component(node)){return;}components.add(node,2);},ClassProperty:function ClassProperty(node){node=utils.getParentComponent();if(!node){return;}components.add(node,2);},ObjectExpression:function ObjectExpression(node){if(!utils.isES5Component(node)){return;}components.add(node,2);},FunctionExpression:function FunctionExpression(node){if(node.async){components.add(node,0);return;}var component=utils.getParentComponent();if(!component||component.parent&&component.parent.type==='JSXExpressionContainer'){// Ban the node if we cannot find a parent component\ncomponents.add(node,0);return;}components.add(component,1);},FunctionDeclaration:function FunctionDeclaration(node){if(node.async){components.add(node,0);return;}node=utils.getParentComponent();if(!node){return;}components.add(node,1);},ArrowFunctionExpression:function ArrowFunctionExpression(node){if(node.async){components.add(node,0);return;}var component=utils.getParentComponent();if(!component||component.parent&&component.parent.type==='JSXExpressionContainer'){// Ban the node if we cannot find a parent component\ncomponents.add(node,0);return;}if(component.expression&&utils.isReturningJSX(component)){components.add(component,2);}else{components.add(component,1);}},ThisExpression:function ThisExpression(node){var component=utils.getParentComponent();if(!component||!/Function/.test(component.type)||!node.parent.property){return;}// Ban functions accessing a property on a ThisExpression\ncomponents.add(node,0);},BlockComment:function BlockComment(node){pragma=pragmaUtil.getFromNode(node)||pragma;},ReturnStatement:function ReturnStatement(node){if(!utils.isReturningJSX(node)){return;}node=utils.getParentComponent();if(!node){var scope=context.getScope();components.add(scope.block,1);return;}components.add(node,2);}};// Update the provided rule instructions to add the component detection\nvar ruleInstructions=rule(context,components,utils);var updatedRuleInstructions=util._extend({},ruleInstructions);(0,_keys4.default)(detectionInstructions).forEach(function(instruction){updatedRuleInstructions[instruction]=function(node){detectionInstructions[instruction](node);return ruleInstructions[instruction]?ruleInstructions[instruction](node):void 0;};});// Return the updated rule instructions\nreturn updatedRuleInstructions;}Components.detect=function(rule){return componentRule.bind(this,rule);};module.exports=Components;},{\"./pragma\":346,\"./variable\":347,\"doctrine\":349,\"has\":376,\"util\":602}],344:[function(require,module,exports){/**\n * @fileoverview Utility functions for type annotation detection.\n * @author Yannick Croissant\n * @author Vitor Balocco\n */'use strict';/**\n * Checks if we are declaring a `props` argument with a flow type annotation.\n * @param {ASTNode} node The AST node being checked.\n * @returns {Boolean} True if the node is a type annotated props declaration, false if not.\n */function isAnnotatedFunctionPropsDeclaration(node,context){if(!node||!node.params||!node.params.length){return false;}var tokens=context.getFirstTokens(node.params[0],2);var isAnnotated=node.params[0].typeAnnotation;var isDestructuredProps=node.params[0].type==='ObjectPattern';var isProps=tokens[0].value==='props'||tokens[1]&&tokens[1].value==='props';return isAnnotated&&(isDestructuredProps||isProps);}module.exports={isAnnotatedFunctionPropsDeclaration:isAnnotatedFunctionPropsDeclaration};},{}],345:[function(require,module,exports){'use strict';/**\n * Find the token before the closing bracket.\n * @param {ASTNode} node - The JSX element node.\n * @returns {Token} The token before the closing bracket.\n */function getTokenBeforeClosingBracket(node){var attributes=node.attributes;if(attributes.length===0){return node.name;}return attributes[attributes.length-1];}module.exports=getTokenBeforeClosingBracket;},{}],346:[function(require,module,exports){/**\n * @fileoverview Utility functions for React pragma configuration\n * @author Yannick Croissant\n */'use strict';var JSX_ANNOTATION_REGEX=/^\\*\\s*@jsx\\s+([^\\s]+)/;// Does not check for reserved keywords or unicode characters\nvar JS_IDENTIFIER_REGEX=/^[_$a-zA-Z][_$a-zA-Z0-9]*$/;function getCreateClassFromContext(context){var pragma='createClass';// .eslintrc shared settings (http://eslint.org/docs/user-guide/configuring#adding-shared-settings)\nif(context.settings.react&&context.settings.react.createClass){pragma=context.settings.react.createClass;}if(!JS_IDENTIFIER_REGEX.test(pragma)){throw new Error('createClass pragma '+pragma+'is not a valid function name');}return pragma;}function getFromContext(context){var pragma='React';// .eslintrc shared settings (http://eslint.org/docs/user-guide/configuring#adding-shared-settings)\nif(context.settings.react&&context.settings.react.pragma){pragma=context.settings.react.pragma;}if(!JS_IDENTIFIER_REGEX.test(pragma)){throw new Error('React pragma '+pragma+'is not a valid identifier');}return pragma;}function getFromNode(node){var matches=JSX_ANNOTATION_REGEX.exec(node.value);if(!matches){return false;}return matches[1].split('.')[0];}module.exports={getCreateClassFromContext:getCreateClassFromContext,getFromContext:getFromContext,getFromNode:getFromNode};},{}],347:[function(require,module,exports){/**\n * @fileoverview Utility functions for React components detection\n * @author Yannick Croissant\n */'use strict';var find=require(\"array.prototype.find\");/**\n * Search a particular variable in a list\n * @param {Array} variables The variables list.\n * @param {Array} name The name of the variable to search.\n * @returns {Boolean} True if the variable was found, false if not.\n */function findVariable(variables,name){return variables.some(function(variable){return variable.name===name;});}/**\n * Find and return a particular variable in a list\n * @param {Array} variables The variables list.\n * @param {Array} name The name of the variable to search.\n * @returns {Object} Variable if the variable was found, null if not.\n */function getVariable(variables,name){return find(variables,function(variable){return variable.name===name;});}/**\n * List all variable in a given scope\n *\n * Contain a patch for babel-eslint to avoid https://github.com/babel/babel-eslint/issues/21\n *\n * @param {Object} context The current rule context.\n * @returns {Array} The variables list\n */function variablesInScope(context){var scope=context.getScope();var variables=scope.variables;while(scope.type!=='global'){scope=scope.upper;variables=scope.variables.concat(variables);}if(scope.childScopes.length){variables=scope.childScopes[0].variables.concat(variables);if(scope.childScopes[0].childScopes.length){variables=scope.childScopes[0].childScopes[0].variables.concat(variables);}}variables.reverse();return variables;}module.exports={findVariable:findVariable,getVariable:getVariable,variablesInScope:variablesInScope};},{\"array.prototype.find\":8}],348:[function(require,module,exports){/**\n * @fileoverview Utility functions for React version configuration\n * @author Yannick Croissant\n */'use strict';function getFromContext(context){var confVer='999.999.999';// .eslintrc shared settings (http://eslint.org/docs/user-guide/configuring#adding-shared-settings)\nif(context.settings.react&&context.settings.react.version){confVer=context.settings.react.version;}confVer=/^[0-9]+\\.[0-9]+$/.test(confVer)?confVer+'.0':confVer;return confVer.split('.').map(function(part){return Number(part);});}function test(context,methodVer){var confVer=getFromContext(context);methodVer=methodVer.split('.').map(function(part){return Number(part);});var higherMajor=methodVer[0]<confVer[0];var higherMinor=methodVer[0]===confVer[0]&&methodVer[1]<confVer[1];var higherOrEqualPatch=methodVer[0]===confVer[0]&&methodVer[1]===confVer[1]&&methodVer[2]<=confVer[2];return higherMajor||higherMinor||higherOrEqualPatch;}module.exports={test:test};},{}],349:[function(require,module,exports){arguments[4][182][0].apply(exports,arguments);},{\"./typed\":350,\"./utility\":351,\"dup\":182,\"esutils\":365,\"isarray\":353}],350:[function(require,module,exports){arguments[4][183][0].apply(exports,arguments);},{\"./utility\":351,\"dup\":183,\"esutils\":365}],351:[function(require,module,exports){arguments[4][184][0].apply(exports,arguments);},{\"../package.json\":352,\"assert\":11,\"dup\":184}],352:[function(require,module,exports){module.exports={\"name\":\"doctrine\",\"description\":\"JSDoc parser\",\"homepage\":\"https://github.com/eslint/doctrine\",\"main\":\"lib/doctrine.js\",\"version\":\"1.5.0\",\"engines\":{\"node\":\">=0.10.0\"},\"directories\":{\"lib\":\"./lib\"},\"files\":[\"lib\",\"LICENSE.BSD\",\"LICENSE.closure-compiler\",\"LICENSE.esprima\",\"README.md\"],\"maintainers\":[{\"name\":\"Nicholas C. Zakas\",\"email\":\"nicholas+npm@nczconsulting.com\",\"web\":\"https://www.nczonline.net\"},{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"web\":\"https://github.com/Constellation\"}],\"repository\":\"eslint/doctrine\",\"devDependencies\":{\"coveralls\":\"^2.11.2\",\"dateformat\":\"^1.0.11\",\"eslint\":\"^1.10.3\",\"eslint-release\":\"^0.10.0\",\"istanbul\":\"^0.4.1\",\"linefix\":\"^0.1.1\",\"mocha\":\"^2.3.3\",\"npm-license\":\"^0.3.1\",\"semver\":\"^5.0.3\",\"shelljs\":\"^0.5.3\",\"shelljs-nodecli\":\"^0.1.1\",\"should\":\"^5.0.1\"},\"licenses\":[{\"type\":\"BSD\",\"url\":\"http://github.com/eslint/doctrine/raw/master/LICENSE.BSD\"}],\"scripts\":{\"test\":\"npm run lint && node Makefile.js test\",\"lint\":\"eslint lib/\",\"release\":\"eslint-release\",\"ci-release\":\"eslint-ci-release\",\"alpharelease\":\"eslint-prerelease alpha\",\"betarelease\":\"eslint-prerelease beta\"},\"dependencies\":{\"esutils\":\"^2.0.2\",\"isarray\":\"^1.0.0\"}};},{}],353:[function(require,module,exports){arguments[4][185][0].apply(exports,arguments);},{\"dup\":185}],354:[function(require,module,exports){/* vim: set sw=4 sts=4 : */(function(){var estraverse=require(\"estraverse\");var parser=require(\"./parser\");var isArray=Array.isArray||function isArray(array){return{}.toString.call(array)==='[object Array]';};var LEFT_SIDE={};var RIGHT_SIDE={};function esqueryModule(){/**\n         * Get the value of a property which may be multiple levels down in the object.\n         */function getPath(obj,key){var i,keys=key.split(\".\");for(i=0;i<keys.length;i++){if(obj==null){return obj;}obj=obj[keys[i]];}return obj;}/**\n         * Determine whether `node` can be reached by following `path`, starting at `ancestor`.\n         */function inPath(node,ancestor,path){var field,remainingPath,i;if(path.length===0){return node===ancestor;}if(ancestor==null){return false;}field=ancestor[path[0]];remainingPath=path.slice(1);if(isArray(field)){for(i=0,l=field.length;i<l;++i){if(inPath(node,field[i],remainingPath)){return true;}}return false;}else{return inPath(node,field,remainingPath);}}/**\n         * Given a `node` and its ancestors, determine if `node` is matched by `selector`.\n         */function matches(node,selector,ancestry){var path,ancestor,i,l,p;if(!selector){return true;}if(!node){return false;}if(!ancestry){ancestry=[];}switch(selector.type){case'wildcard':return true;case'identifier':return selector.value.toLowerCase()===node.type.toLowerCase();case'field':path=selector.name.split('.');ancestor=ancestry[path.length-1];return inPath(node,ancestor,path);case'matches':for(i=0,l=selector.selectors.length;i<l;++i){if(matches(node,selector.selectors[i],ancestry)){return true;}}return false;case'compound':for(i=0,l=selector.selectors.length;i<l;++i){if(!matches(node,selector.selectors[i],ancestry)){return false;}}return true;case'not':for(i=0,l=selector.selectors.length;i<l;++i){if(matches(node,selector.selectors[i],ancestry)){return false;}}return true;case'child':if(matches(node,selector.right,ancestry)){return matches(ancestry[0],selector.left,ancestry.slice(1));}return false;case'descendant':if(matches(node,selector.right,ancestry)){for(i=0,l=ancestry.length;i<l;++i){if(matches(ancestry[i],selector.left,ancestry.slice(i+1))){return true;}}}return false;case'attribute':p=getPath(node,selector.name);switch(selector.operator){case null:case void 0:return p!=null;case'=':switch(selector.value.type){case'regexp':return selector.value.value.test(p);case'literal':return''+selector.value.value===''+p;case'type':return selector.value.value===(typeof p===\"undefined\"?\"undefined\":(0,_typeof6.default)(p));}case'!=':switch(selector.value.type){case'regexp':return!selector.value.value.test(p);case'literal':return''+selector.value.value!==''+p;case'type':return selector.value.value!==(typeof p===\"undefined\"?\"undefined\":(0,_typeof6.default)(p));}case'<=':return p<=selector.value.value;case'<':return p<selector.value.value;case'>':return p>selector.value.value;case'>=':return p>=selector.value.value;}case'sibling':return matches(node,selector.right,ancestry)&&sibling(node,selector.left,ancestry,LEFT_SIDE)||selector.left.subject&&matches(node,selector.left,ancestry)&&sibling(node,selector.right,ancestry,RIGHT_SIDE);case'adjacent':return matches(node,selector.right,ancestry)&&adjacent(node,selector.left,ancestry,LEFT_SIDE)||selector.right.subject&&matches(node,selector.left,ancestry)&&adjacent(node,selector.right,ancestry,RIGHT_SIDE);case'nth-child':return matches(node,selector.right,ancestry)&&nthChild(node,ancestry,function(length){return selector.index.value-1;});case'nth-last-child':return matches(node,selector.right,ancestry)&&nthChild(node,ancestry,function(length){return length-selector.index.value;});case'class':if(!node.type)return false;switch(selector.name.toLowerCase()){case'statement':if(node.type.slice(-9)==='Statement')return true;// fallthrough: interface Declaration <: Statement { }\ncase'declaration':return node.type.slice(-11)==='Declaration';case'pattern':if(node.type.slice(-7)==='Pattern')return true;// fallthrough: interface Expression <: Node, Pattern { }\ncase'expression':return node.type.slice(-10)==='Expression'||node.type==='Literal'||node.type==='Identifier';case'function':return node.type.slice(0,8)==='Function'||node.type==='ArrowFunctionExpression';}throw new Error('Unknown class name: '+selector.name);}throw new Error('Unknown selector type: '+selector.type);}/*\n         * Determines if the given node has a sibling that matches the given selector.\n         */function sibling(node,selector,ancestry,side){var parent=ancestry[0],listProp,startIndex,keys,i,l,k,lowerBound,upperBound;if(!parent){return false;}keys=estraverse.VisitorKeys[parent.type];for(i=0,l=keys.length;i<l;++i){listProp=parent[keys[i]];if(isArray(listProp)){startIndex=listProp.indexOf(node);if(startIndex<0){continue;}if(side===LEFT_SIDE){lowerBound=0;upperBound=startIndex;}else{lowerBound=startIndex+1;upperBound=listProp.length;}for(k=lowerBound;k<upperBound;++k){if(matches(listProp[k],selector,ancestry)){return true;}}}}return false;}/*\n         * Determines if the given node has an asjacent sibling that matches the given selector.\n         */function adjacent(node,selector,ancestry,side){var parent=ancestry[0],listProp,keys,i,l,idx;if(!parent){return false;}keys=estraverse.VisitorKeys[parent.type];for(i=0,l=keys.length;i<l;++i){listProp=parent[keys[i]];if(isArray(listProp)){idx=listProp.indexOf(node);if(idx<0){continue;}if(side===LEFT_SIDE&&idx>0&&matches(listProp[idx-1],selector,ancestry)){return true;}if(side===RIGHT_SIDE&&idx<listProp.length-1&&matches(listProp[idx+1],selector,ancestry)){return true;}}}return false;}/*\n         * Determines if the given node is the nth child, determined by idxFn, which is given the containing list's length.\n         */function nthChild(node,ancestry,idxFn){var parent=ancestry[0],listProp,keys,i,l,idx;if(!parent){return false;}keys=estraverse.VisitorKeys[parent.type];for(i=0,l=keys.length;i<l;++i){listProp=parent[keys[i]];if(isArray(listProp)){idx=listProp.indexOf(node);if(idx>=0&&idx===idxFn(listProp.length)){return true;}}}return false;}/*\n         * For each selector node marked as a subject, find the portion of the selector that the subject must match.\n         */function subjects(selector,ancestor){var results,p;if(selector==null||(typeof selector===\"undefined\"?\"undefined\":(0,_typeof6.default)(selector))!='object'){return[];}if(ancestor==null){ancestor=selector;}results=selector.subject?[ancestor]:[];for(p in selector){if(!{}.hasOwnProperty.call(selector,p)){continue;}[].push.apply(results,subjects(selector[p],p==='left'?selector[p]:ancestor));}return results;}/**\n         * From a JS AST and a selector AST, collect all JS AST nodes that match the selector.\n         */function match(ast,selector){var ancestry=[],results=[],altSubjects,i,l,k,m;if(!selector){return results;}altSubjects=subjects(selector);estraverse.traverse(ast,{enter:function enter(node,parent){if(parent!=null){ancestry.unshift(parent);}if(matches(node,selector,ancestry)){if(altSubjects.length){for(i=0,l=altSubjects.length;i<l;++i){if(matches(node,altSubjects[i],ancestry)){results.push(node);}for(k=0,m=ancestry.length;k<m;++k){if(matches(ancestry[k],altSubjects[i],ancestry.slice(k+1))){results.push(ancestry[k]);}}}}else{results.push(node);}}},leave:function leave(){ancestry.shift();}});return results;}/**\n         * Parse a selector string and return its AST.\n         */function parse(selector){return parser.parse(selector);}/**\n         * Query the code AST using the selector string.\n         */function query(ast,selector){return match(ast,parse(selector));}query.parse=parse;query.match=match;query.matches=matches;return query.query=query;}if(typeof define===\"function\"&&define.amd){define(esqueryModule);}else if(typeof module!=='undefined'&&module.exports){module.exports=esqueryModule();}else{this.esquery=esqueryModule();}})();},{\"./parser\":355,\"estraverse\":360}],355:[function(require,module,exports){var result=function(){/*\n   * Generated by PEG.js 0.7.0.\n   *\n   * http://pegjs.majda.cz/\n   */function quote(s){/*\n     * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a\n     * string literal except for the closing quote character, backslash,\n     * carriage return, line separator, paragraph separator, and line feed.\n     * Any character may appear in the form of an escape sequence.\n     *\n     * For portability, we also escape escape all control and non-ASCII\n     * characters. Note that \"\\0\" and \"\\v\" escape sequences are not used\n     * because JSHint does not like the first and IE the second.\n     */return'\"'+s.replace(/\\\\/g,'\\\\\\\\')// backslash\n.replace(/\"/g,'\\\\\"')// closing quote character\n.replace(/\\x08/g,'\\\\b')// backspace\n.replace(/\\t/g,'\\\\t')// horizontal tab\n.replace(/\\n/g,'\\\\n')// line feed\n.replace(/\\f/g,'\\\\f')// form feed\n.replace(/\\r/g,'\\\\r')// carriage return\n.replace(/[\\x00-\\x07\\x0B\\x0E-\\x1F\\x80-\\uFFFF]/g,escape)+'\"';}var result={/*\n     * Parses the input with a generated parser. If the parsing is successfull,\n     * returns a value explicitly or implicitly specified by the grammar from\n     * which the parser was generated (see |PEG.buildParser|). If the parsing is\n     * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.\n     */parse:function parse(input,startRule){var parseFunctions={\"start\":parse_start,\"_\":parse__,\"identifierName\":parse_identifierName,\"binaryOp\":parse_binaryOp,\"selectors\":parse_selectors,\"selector\":parse_selector,\"sequence\":parse_sequence,\"atom\":parse_atom,\"wildcard\":parse_wildcard,\"identifier\":parse_identifier,\"attr\":parse_attr,\"attrOps\":parse_attrOps,\"attrEqOps\":parse_attrEqOps,\"attrName\":parse_attrName,\"attrValue\":parse_attrValue,\"string\":parse_string,\"number\":parse_number,\"path\":parse_path,\"type\":parse_type,\"regex\":parse_regex,\"field\":parse_field,\"negation\":parse_negation,\"matches\":parse_matches,\"firstChild\":parse_firstChild,\"lastChild\":parse_lastChild,\"nthChild\":parse_nthChild,\"nthLastChild\":parse_nthLastChild,\"class\":parse_class};if(startRule!==undefined){if(parseFunctions[startRule]===undefined){throw new Error(\"Invalid rule name: \"+quote(startRule)+\".\");}}else{startRule=\"start\";}var pos=0;var reportFailures=0;var rightmostFailuresPos=0;var rightmostFailuresExpected=[];var cache={};function padLeft(input,padding,length){var result=input;var padLength=length-input.length;for(var i=0;i<padLength;i++){result=padding+result;}return result;}function escape(ch){var charCode=ch.charCodeAt(0);var escapeChar;var length;if(charCode<=0xFF){escapeChar='x';length=2;}else{escapeChar='u';length=4;}return'\\\\'+escapeChar+padLeft(charCode.toString(16).toUpperCase(),'0',length);}function matchFailed(failure){if(pos<rightmostFailuresPos){return;}if(pos>rightmostFailuresPos){rightmostFailuresPos=pos;rightmostFailuresExpected=[];}rightmostFailuresExpected.push(failure);}function parse_start(){var cacheKey=\"start@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2;var pos0,pos1;pos0=pos;pos1=pos;result0=parse__();if(result0!==null){result1=parse_selectors();if(result1!==null){result2=parse__();if(result2!==null){result0=[result0,result1,result2];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,ss){return ss.length===1?ss[0]:{type:'matches',selectors:ss};}(pos0,result0[1]);}if(result0===null){pos=pos0;}if(result0===null){pos0=pos;result0=parse__();if(result0!==null){result0=function(offset){return void 0;}(pos0);}if(result0===null){pos=pos0;}}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse__(){var cacheKey=\"_@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1;result0=[];if(input.charCodeAt(pos)===32){result1=\" \";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\" \\\"\");}}while(result1!==null){result0.push(result1);if(input.charCodeAt(pos)===32){result1=\" \";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\" \\\"\");}}}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_identifierName(){var cacheKey=\"identifierName@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1;var pos0;pos0=pos;if(/^[^ [\\],():#!=><~+.]/.test(input.charAt(pos))){result1=input.charAt(pos);pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"[^ [\\\\],():#!=><~+.]\");}}if(result1!==null){result0=[];while(result1!==null){result0.push(result1);if(/^[^ [\\],():#!=><~+.]/.test(input.charAt(pos))){result1=input.charAt(pos);pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"[^ [\\\\],():#!=><~+.]\");}}}}else{result0=null;}if(result0!==null){result0=function(offset,i){return i.join('');}(pos0,result0);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_binaryOp(){var cacheKey=\"binaryOp@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2;var pos0,pos1;pos0=pos;pos1=pos;result0=parse__();if(result0!==null){if(input.charCodeAt(pos)===62){result1=\">\";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\">\\\"\");}}if(result1!==null){result2=parse__();if(result2!==null){result0=[result0,result1,result2];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset){return'child';}(pos0);}if(result0===null){pos=pos0;}if(result0===null){pos0=pos;pos1=pos;result0=parse__();if(result0!==null){if(input.charCodeAt(pos)===126){result1=\"~\";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"~\\\"\");}}if(result1!==null){result2=parse__();if(result2!==null){result0=[result0,result1,result2];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset){return'sibling';}(pos0);}if(result0===null){pos=pos0;}if(result0===null){pos0=pos;pos1=pos;result0=parse__();if(result0!==null){if(input.charCodeAt(pos)===43){result1=\"+\";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"+\\\"\");}}if(result1!==null){result2=parse__();if(result2!==null){result0=[result0,result1,result2];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset){return'adjacent';}(pos0);}if(result0===null){pos=pos0;}if(result0===null){pos0=pos;pos1=pos;if(input.charCodeAt(pos)===32){result0=\" \";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\" \\\"\");}}if(result0!==null){result1=parse__();if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset){return'descendant';}(pos0);}if(result0===null){pos=pos0;}}}}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_selectors(){var cacheKey=\"selectors@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4,result5;var pos0,pos1,pos2;pos0=pos;pos1=pos;result0=parse_selector();if(result0!==null){result1=[];pos2=pos;result2=parse__();if(result2!==null){if(input.charCodeAt(pos)===44){result3=\",\";pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"\\\",\\\"\");}}if(result3!==null){result4=parse__();if(result4!==null){result5=parse_selector();if(result5!==null){result2=[result2,result3,result4,result5];}else{result2=null;pos=pos2;}}else{result2=null;pos=pos2;}}else{result2=null;pos=pos2;}}else{result2=null;pos=pos2;}while(result2!==null){result1.push(result2);pos2=pos;result2=parse__();if(result2!==null){if(input.charCodeAt(pos)===44){result3=\",\";pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"\\\",\\\"\");}}if(result3!==null){result4=parse__();if(result4!==null){result5=parse_selector();if(result5!==null){result2=[result2,result3,result4,result5];}else{result2=null;pos=pos2;}}else{result2=null;pos=pos2;}}else{result2=null;pos=pos2;}}else{result2=null;pos=pos2;}}if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,s,ss){return[s].concat(ss.map(function(s){return s[3];}));}(pos0,result0[0],result0[1]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_selector(){var cacheKey=\"selector@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3;var pos0,pos1,pos2;pos0=pos;pos1=pos;result0=parse_sequence();if(result0!==null){result1=[];pos2=pos;result2=parse_binaryOp();if(result2!==null){result3=parse_sequence();if(result3!==null){result2=[result2,result3];}else{result2=null;pos=pos2;}}else{result2=null;pos=pos2;}while(result2!==null){result1.push(result2);pos2=pos;result2=parse_binaryOp();if(result2!==null){result3=parse_sequence();if(result3!==null){result2=[result2,result3];}else{result2=null;pos=pos2;}}else{result2=null;pos=pos2;}}if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,a,ops){return ops.reduce(function(memo,rhs){return{type:rhs[0],left:memo,right:rhs[1]};},a);}(pos0,result0[0],result0[1]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_sequence(){var cacheKey=\"sequence@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2;var pos0,pos1;pos0=pos;pos1=pos;if(input.charCodeAt(pos)===33){result0=\"!\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"!\\\"\");}}result0=result0!==null?result0:\"\";if(result0!==null){result2=parse_atom();if(result2!==null){result1=[];while(result2!==null){result1.push(result2);result2=parse_atom();}}else{result1=null;}if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,subject,as){var b=as.length===1?as[0]:{type:'compound',selectors:as};if(subject)b.subject=true;return b;}(pos0,result0[0],result0[1]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_atom(){var cacheKey=\"atom@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0;result0=parse_wildcard();if(result0===null){result0=parse_identifier();if(result0===null){result0=parse_attr();if(result0===null){result0=parse_field();if(result0===null){result0=parse_negation();if(result0===null){result0=parse_matches();if(result0===null){result0=parse_firstChild();if(result0===null){result0=parse_lastChild();if(result0===null){result0=parse_nthChild();if(result0===null){result0=parse_nthLastChild();if(result0===null){result0=parse_class();}}}}}}}}}}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_wildcard(){var cacheKey=\"wildcard@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0;var pos0;pos0=pos;if(input.charCodeAt(pos)===42){result0=\"*\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"*\\\"\");}}if(result0!==null){result0=function(offset,a){return{type:'wildcard',value:a};}(pos0,result0);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_identifier(){var cacheKey=\"identifier@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1;var pos0,pos1;pos0=pos;pos1=pos;if(input.charCodeAt(pos)===35){result0=\"#\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"#\\\"\");}}result0=result0!==null?result0:\"\";if(result0!==null){result1=parse_identifierName();if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,i){return{type:'identifier',value:i};}(pos0,result0[1]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_attr(){var cacheKey=\"attr@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4;var pos0,pos1;pos0=pos;pos1=pos;if(input.charCodeAt(pos)===91){result0=\"[\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"[\\\"\");}}if(result0!==null){result1=parse__();if(result1!==null){result2=parse_attrValue();if(result2!==null){result3=parse__();if(result3!==null){if(input.charCodeAt(pos)===93){result4=\"]\";pos++;}else{result4=null;if(reportFailures===0){matchFailed(\"\\\"]\\\"\");}}if(result4!==null){result0=[result0,result1,result2,result3,result4];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,v){return v;}(pos0,result0[2]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_attrOps(){var cacheKey=\"attrOps@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1;var pos0,pos1;pos0=pos;pos1=pos;if(/^[><!]/.test(input.charAt(pos))){result0=input.charAt(pos);pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"[><!]\");}}result0=result0!==null?result0:\"\";if(result0!==null){if(input.charCodeAt(pos)===61){result1=\"=\";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"=\\\"\");}}if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,a){return a+'=';}(pos0,result0[0]);}if(result0===null){pos=pos0;}if(result0===null){if(/^[><]/.test(input.charAt(pos))){result0=input.charAt(pos);pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"[><]\");}}}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_attrEqOps(){var cacheKey=\"attrEqOps@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1;var pos0,pos1;pos0=pos;pos1=pos;if(input.charCodeAt(pos)===33){result0=\"!\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"!\\\"\");}}result0=result0!==null?result0:\"\";if(result0!==null){if(input.charCodeAt(pos)===61){result1=\"=\";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"=\\\"\");}}if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,a){return a+'=';}(pos0,result0[0]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_attrName(){var cacheKey=\"attrName@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1;var pos0;pos0=pos;result1=parse_identifierName();if(result1===null){if(input.charCodeAt(pos)===46){result1=\".\";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\".\\\"\");}}}if(result1!==null){result0=[];while(result1!==null){result0.push(result1);result1=parse_identifierName();if(result1===null){if(input.charCodeAt(pos)===46){result1=\".\";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\".\\\"\");}}}}}else{result0=null;}if(result0!==null){result0=function(offset,i){return i.join('');}(pos0,result0);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_attrValue(){var cacheKey=\"attrValue@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4;var pos0,pos1;pos0=pos;pos1=pos;result0=parse_attrName();if(result0!==null){result1=parse__();if(result1!==null){result2=parse_attrEqOps();if(result2!==null){result3=parse__();if(result3!==null){result4=parse_type();if(result4===null){result4=parse_regex();}if(result4!==null){result0=[result0,result1,result2,result3,result4];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,name,op,value){return{type:'attribute',name:name,operator:op,value:value};}(pos0,result0[0],result0[2],result0[4]);}if(result0===null){pos=pos0;}if(result0===null){pos0=pos;pos1=pos;result0=parse_attrName();if(result0!==null){result1=parse__();if(result1!==null){result2=parse_attrOps();if(result2!==null){result3=parse__();if(result3!==null){result4=parse_string();if(result4===null){result4=parse_number();if(result4===null){result4=parse_path();}}if(result4!==null){result0=[result0,result1,result2,result3,result4];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,name,op,value){return{type:'attribute',name:name,operator:op,value:value};}(pos0,result0[0],result0[2],result0[4]);}if(result0===null){pos=pos0;}if(result0===null){pos0=pos;result0=parse_attrName();if(result0!==null){result0=function(offset,name){return{type:'attribute',name:name};}(pos0,result0);}if(result0===null){pos=pos0;}}}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_string(){var cacheKey=\"string@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3;var pos0,pos1,pos2,pos3;pos0=pos;pos1=pos;if(input.charCodeAt(pos)===34){result0=\"\\\"\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"\\\\\\\"\\\"\");}}if(result0!==null){result1=[];if(/^[^\\\\\"]/.test(input.charAt(pos))){result2=input.charAt(pos);pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"[^\\\\\\\\\\\"]\");}}if(result2===null){pos2=pos;pos3=pos;if(input.charCodeAt(pos)===92){result2=\"\\\\\";pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"\\\"\\\\\\\\\\\"\");}}if(result2!==null){if(input.length>pos){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"any character\");}}if(result3!==null){result2=[result2,result3];}else{result2=null;pos=pos3;}}else{result2=null;pos=pos3;}if(result2!==null){result2=function(offset,a,b){return a+b;}(pos2,result2[0],result2[1]);}if(result2===null){pos=pos2;}}while(result2!==null){result1.push(result2);if(/^[^\\\\\"]/.test(input.charAt(pos))){result2=input.charAt(pos);pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"[^\\\\\\\\\\\"]\");}}if(result2===null){pos2=pos;pos3=pos;if(input.charCodeAt(pos)===92){result2=\"\\\\\";pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"\\\"\\\\\\\\\\\"\");}}if(result2!==null){if(input.length>pos){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"any character\");}}if(result3!==null){result2=[result2,result3];}else{result2=null;pos=pos3;}}else{result2=null;pos=pos3;}if(result2!==null){result2=function(offset,a,b){return a+b;}(pos2,result2[0],result2[1]);}if(result2===null){pos=pos2;}}}if(result1!==null){if(input.charCodeAt(pos)===34){result2=\"\\\"\";pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"\\\"\\\\\\\"\\\"\");}}if(result2!==null){result0=[result0,result1,result2];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,d){return{type:'literal',value:strUnescape(d.join(''))};}(pos0,result0[1]);}if(result0===null){pos=pos0;}if(result0===null){pos0=pos;pos1=pos;if(input.charCodeAt(pos)===39){result0=\"'\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"'\\\"\");}}if(result0!==null){result1=[];if(/^[^\\\\']/.test(input.charAt(pos))){result2=input.charAt(pos);pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"[^\\\\\\\\']\");}}if(result2===null){pos2=pos;pos3=pos;if(input.charCodeAt(pos)===92){result2=\"\\\\\";pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"\\\"\\\\\\\\\\\"\");}}if(result2!==null){if(input.length>pos){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"any character\");}}if(result3!==null){result2=[result2,result3];}else{result2=null;pos=pos3;}}else{result2=null;pos=pos3;}if(result2!==null){result2=function(offset,a,b){return a+b;}(pos2,result2[0],result2[1]);}if(result2===null){pos=pos2;}}while(result2!==null){result1.push(result2);if(/^[^\\\\']/.test(input.charAt(pos))){result2=input.charAt(pos);pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"[^\\\\\\\\']\");}}if(result2===null){pos2=pos;pos3=pos;if(input.charCodeAt(pos)===92){result2=\"\\\\\";pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"\\\"\\\\\\\\\\\"\");}}if(result2!==null){if(input.length>pos){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"any character\");}}if(result3!==null){result2=[result2,result3];}else{result2=null;pos=pos3;}}else{result2=null;pos=pos3;}if(result2!==null){result2=function(offset,a,b){return a+b;}(pos2,result2[0],result2[1]);}if(result2===null){pos=pos2;}}}if(result1!==null){if(input.charCodeAt(pos)===39){result2=\"'\";pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"\\\"'\\\"\");}}if(result2!==null){result0=[result0,result1,result2];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,d){return{type:'literal',value:strUnescape(d.join(''))};}(pos0,result0[1]);}if(result0===null){pos=pos0;}}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_number(){var cacheKey=\"number@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2;var pos0,pos1,pos2;pos0=pos;pos1=pos;pos2=pos;result0=[];if(/^[0-9]/.test(input.charAt(pos))){result1=input.charAt(pos);pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"[0-9]\");}}while(result1!==null){result0.push(result1);if(/^[0-9]/.test(input.charAt(pos))){result1=input.charAt(pos);pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"[0-9]\");}}}if(result0!==null){if(input.charCodeAt(pos)===46){result1=\".\";pos++;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\".\\\"\");}}if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos2;}}else{result0=null;pos=pos2;}result0=result0!==null?result0:\"\";if(result0!==null){if(/^[0-9]/.test(input.charAt(pos))){result2=input.charAt(pos);pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"[0-9]\");}}if(result2!==null){result1=[];while(result2!==null){result1.push(result2);if(/^[0-9]/.test(input.charAt(pos))){result2=input.charAt(pos);pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"[0-9]\");}}}}else{result1=null;}if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,a,b){return{type:'literal',value:parseFloat((a?a.join(''):'')+b.join(''))};}(pos0,result0[0],result0[1]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_path(){var cacheKey=\"path@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0;var pos0;pos0=pos;result0=parse_identifierName();if(result0!==null){result0=function(offset,i){return{type:'literal',value:i};}(pos0,result0);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_type(){var cacheKey=\"type@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4;var pos0,pos1;pos0=pos;pos1=pos;if(input.substr(pos,5)===\"type(\"){result0=\"type(\";pos+=5;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"type(\\\"\");}}if(result0!==null){result1=parse__();if(result1!==null){if(/^[^ )]/.test(input.charAt(pos))){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"[^ )]\");}}if(result3!==null){result2=[];while(result3!==null){result2.push(result3);if(/^[^ )]/.test(input.charAt(pos))){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"[^ )]\");}}}}else{result2=null;}if(result2!==null){result3=parse__();if(result3!==null){if(input.charCodeAt(pos)===41){result4=\")\";pos++;}else{result4=null;if(reportFailures===0){matchFailed(\"\\\")\\\"\");}}if(result4!==null){result0=[result0,result1,result2,result3,result4];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,t){return{type:'type',value:t.join('')};}(pos0,result0[2]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_regex(){var cacheKey=\"regex@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2;var pos0,pos1;pos0=pos;pos1=pos;if(input.charCodeAt(pos)===47){result0=\"/\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\"/\\\"\");}}if(result0!==null){if(/^[^\\/]/.test(input.charAt(pos))){result2=input.charAt(pos);pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"[^\\\\/]\");}}if(result2!==null){result1=[];while(result2!==null){result1.push(result2);if(/^[^\\/]/.test(input.charAt(pos))){result2=input.charAt(pos);pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"[^\\\\/]\");}}}}else{result1=null;}if(result1!==null){if(input.charCodeAt(pos)===47){result2=\"/\";pos++;}else{result2=null;if(reportFailures===0){matchFailed(\"\\\"/\\\"\");}}if(result2!==null){result0=[result0,result1,result2];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,d){return{type:'regexp',value:new RegExp(d.join(''))};}(pos0,result0[1]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_field(){var cacheKey=\"field@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4;var pos0,pos1,pos2;pos0=pos;pos1=pos;if(input.charCodeAt(pos)===46){result0=\".\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\".\\\"\");}}if(result0!==null){result1=parse_identifierName();if(result1!==null){result2=[];pos2=pos;if(input.charCodeAt(pos)===46){result3=\".\";pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"\\\".\\\"\");}}if(result3!==null){result4=parse_identifierName();if(result4!==null){result3=[result3,result4];}else{result3=null;pos=pos2;}}else{result3=null;pos=pos2;}while(result3!==null){result2.push(result3);pos2=pos;if(input.charCodeAt(pos)===46){result3=\".\";pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"\\\".\\\"\");}}if(result3!==null){result4=parse_identifierName();if(result4!==null){result3=[result3,result4];}else{result3=null;pos=pos2;}}else{result3=null;pos=pos2;}}if(result2!==null){result0=[result0,result1,result2];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,i,is){return{type:'field',name:is.reduce(function(memo,p){return memo+p[0]+p[1];},i)};}(pos0,result0[1],result0[2]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_negation(){var cacheKey=\"negation@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4;var pos0,pos1;pos0=pos;pos1=pos;if(input.substr(pos,5)===\":not(\"){result0=\":not(\";pos+=5;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\":not(\\\"\");}}if(result0!==null){result1=parse__();if(result1!==null){result2=parse_selectors();if(result2!==null){result3=parse__();if(result3!==null){if(input.charCodeAt(pos)===41){result4=\")\";pos++;}else{result4=null;if(reportFailures===0){matchFailed(\"\\\")\\\"\");}}if(result4!==null){result0=[result0,result1,result2,result3,result4];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,ss){return{type:'not',selectors:ss};}(pos0,result0[2]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_matches(){var cacheKey=\"matches@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4;var pos0,pos1;pos0=pos;pos1=pos;if(input.substr(pos,9)===\":matches(\"){result0=\":matches(\";pos+=9;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\":matches(\\\"\");}}if(result0!==null){result1=parse__();if(result1!==null){result2=parse_selectors();if(result2!==null){result3=parse__();if(result3!==null){if(input.charCodeAt(pos)===41){result4=\")\";pos++;}else{result4=null;if(reportFailures===0){matchFailed(\"\\\")\\\"\");}}if(result4!==null){result0=[result0,result1,result2,result3,result4];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,ss){return{type:'matches',selectors:ss};}(pos0,result0[2]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_firstChild(){var cacheKey=\"firstChild@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0;var pos0;pos0=pos;if(input.substr(pos,12)===\":first-child\"){result0=\":first-child\";pos+=12;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\":first-child\\\"\");}}if(result0!==null){result0=function(offset){return nth(1);}(pos0);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_lastChild(){var cacheKey=\"lastChild@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0;var pos0;pos0=pos;if(input.substr(pos,11)===\":last-child\"){result0=\":last-child\";pos+=11;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\":last-child\\\"\");}}if(result0!==null){result0=function(offset){return nthLast(1);}(pos0);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_nthChild(){var cacheKey=\"nthChild@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4;var pos0,pos1;pos0=pos;pos1=pos;if(input.substr(pos,11)===\":nth-child(\"){result0=\":nth-child(\";pos+=11;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\":nth-child(\\\"\");}}if(result0!==null){result1=parse__();if(result1!==null){if(/^[0-9]/.test(input.charAt(pos))){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"[0-9]\");}}if(result3!==null){result2=[];while(result3!==null){result2.push(result3);if(/^[0-9]/.test(input.charAt(pos))){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"[0-9]\");}}}}else{result2=null;}if(result2!==null){result3=parse__();if(result3!==null){if(input.charCodeAt(pos)===41){result4=\")\";pos++;}else{result4=null;if(reportFailures===0){matchFailed(\"\\\")\\\"\");}}if(result4!==null){result0=[result0,result1,result2,result3,result4];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,n){return nth(parseInt(n.join(''),10));}(pos0,result0[2]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_nthLastChild(){var cacheKey=\"nthLastChild@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1,result2,result3,result4;var pos0,pos1;pos0=pos;pos1=pos;if(input.substr(pos,16)===\":nth-last-child(\"){result0=\":nth-last-child(\";pos+=16;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\":nth-last-child(\\\"\");}}if(result0!==null){result1=parse__();if(result1!==null){if(/^[0-9]/.test(input.charAt(pos))){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"[0-9]\");}}if(result3!==null){result2=[];while(result3!==null){result2.push(result3);if(/^[0-9]/.test(input.charAt(pos))){result3=input.charAt(pos);pos++;}else{result3=null;if(reportFailures===0){matchFailed(\"[0-9]\");}}}}else{result2=null;}if(result2!==null){result3=parse__();if(result3!==null){if(input.charCodeAt(pos)===41){result4=\")\";pos++;}else{result4=null;if(reportFailures===0){matchFailed(\"\\\")\\\"\");}}if(result4!==null){result0=[result0,result1,result2,result3,result4];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,n){return nthLast(parseInt(n.join(''),10));}(pos0,result0[2]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function parse_class(){var cacheKey=\"class@\"+pos;var cachedResult=cache[cacheKey];if(cachedResult){pos=cachedResult.nextPos;return cachedResult.result;}var result0,result1;var pos0,pos1;pos0=pos;pos1=pos;if(input.charCodeAt(pos)===58){result0=\":\";pos++;}else{result0=null;if(reportFailures===0){matchFailed(\"\\\":\\\"\");}}if(result0!==null){if(input.substr(pos,9).toLowerCase()===\"statement\"){result1=input.substr(pos,9);pos+=9;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"statement\\\"\");}}if(result1===null){if(input.substr(pos,10).toLowerCase()===\"expression\"){result1=input.substr(pos,10);pos+=10;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"expression\\\"\");}}if(result1===null){if(input.substr(pos,11).toLowerCase()===\"declaration\"){result1=input.substr(pos,11);pos+=11;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"declaration\\\"\");}}if(result1===null){if(input.substr(pos,8).toLowerCase()===\"function\"){result1=input.substr(pos,8);pos+=8;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"function\\\"\");}}if(result1===null){if(input.substr(pos,7).toLowerCase()===\"pattern\"){result1=input.substr(pos,7);pos+=7;}else{result1=null;if(reportFailures===0){matchFailed(\"\\\"pattern\\\"\");}}}}}}if(result1!==null){result0=[result0,result1];}else{result0=null;pos=pos1;}}else{result0=null;pos=pos1;}if(result0!==null){result0=function(offset,c){return{type:'class',name:c};}(pos0,result0[1]);}if(result0===null){pos=pos0;}cache[cacheKey]={nextPos:pos,result:result0};return result0;}function cleanupExpected(expected){expected.sort();var lastExpected=null;var cleanExpected=[];for(var i=0;i<expected.length;i++){if(expected[i]!==lastExpected){cleanExpected.push(expected[i]);lastExpected=expected[i];}}return cleanExpected;}function computeErrorPosition(){/*\n         * The first idea was to use |String.split| to break the input up to the\n         * error position along newlines and derive the line and column from\n         * there. However IE's |split| implementation is so broken that it was\n         * enough to prevent it.\n         */var line=1;var column=1;var seenCR=false;for(var i=0;i<Math.max(pos,rightmostFailuresPos);i++){var ch=input.charAt(i);if(ch===\"\\n\"){if(!seenCR){line++;}column=1;seenCR=false;}else if(ch===\"\\r\"||ch===\"\\u2028\"||ch===\"\\u2029\"){line++;column=1;seenCR=true;}else{column++;seenCR=false;}}return{line:line,column:column};}function nth(n){return{type:'nth-child',index:{type:'literal',value:n}};}function nthLast(n){return{type:'nth-last-child',index:{type:'literal',value:n}};}function strUnescape(s){return s.replace(/\\\\(.)/g,function(match,ch){switch(ch){case'a':return'\\a';case'b':return'\\b';case'f':return'\\f';case'n':return'\\n';case'r':return'\\r';case't':return'\\t';case'v':return'\\v';default:return ch;}});}var result=parseFunctions[startRule]();/*\n       * The parser is now in one of the following three states:\n       *\n       * 1. The parser successfully parsed the whole input.\n       *\n       *    - |result !== null|\n       *    - |pos === input.length|\n       *    - |rightmostFailuresExpected| may or may not contain something\n       *\n       * 2. The parser successfully parsed only a part of the input.\n       *\n       *    - |result !== null|\n       *    - |pos < input.length|\n       *    - |rightmostFailuresExpected| may or may not contain something\n       *\n       * 3. The parser did not successfully parse any part of the input.\n       *\n       *   - |result === null|\n       *   - |pos === 0|\n       *   - |rightmostFailuresExpected| contains at least one failure\n       *\n       * All code following this comment (including called functions) must\n       * handle these states.\n       */if(result===null||pos!==input.length){var offset=Math.max(pos,rightmostFailuresPos);var found=offset<input.length?input.charAt(offset):null;var errorPosition=computeErrorPosition();throw new this.SyntaxError(cleanupExpected(rightmostFailuresExpected),found,offset,errorPosition.line,errorPosition.column);}return result;},/* Returns the parser source code. */toSource:function toSource(){return this._source;}};/* Thrown when a parser encounters a syntax error. */result.SyntaxError=function(expected,found,offset,line,column){function buildMessage(expected,found){var expectedHumanized,foundHumanized;switch(expected.length){case 0:expectedHumanized=\"end of input\";break;case 1:expectedHumanized=expected[0];break;default:expectedHumanized=expected.slice(0,expected.length-1).join(\", \")+\" or \"+expected[expected.length-1];}foundHumanized=found?quote(found):\"end of input\";return\"Expected \"+expectedHumanized+\" but \"+foundHumanized+\" found.\";}this.name=\"SyntaxError\";this.expected=expected;this.found=found;this.message=buildMessage(expected,found);this.offset=offset;this.line=line;this.column=column;};result.SyntaxError.prototype=Error.prototype;return result;}();if(typeof define===\"function\"&&define.amd){define(function(){return result;});}else if(typeof module!==\"undefined\"&&module.exports){module.exports=result;}else{this.esquery=result;}},{}],356:[function(require,module,exports){/*\n  Copyright (C) 2014 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';var assign,estraverse,isArray,objectKeys;assign=require(\"object-assign\");estraverse=require(\"estraverse\");isArray=Array.isArray||function isArray(array){return Object.prototype.toString.call(array)==='[object Array]';};objectKeys=_keys4.default||function(o){var keys=[],key;for(key in o){keys.push(key);}return keys;};function isNode(node){if(node==null){return false;}return(typeof node===\"undefined\"?\"undefined\":(0,_typeof6.default)(node))==='object'&&typeof node.type==='string';}function isProperty(nodeType,key){return(nodeType===estraverse.Syntax.ObjectExpression||nodeType===estraverse.Syntax.ObjectPattern)&&key==='properties';}function Visitor(visitor,options){options=options||{};this.__visitor=visitor||this;this.__childVisitorKeys=options.childVisitorKeys?assign({},estraverse.VisitorKeys,options.childVisitorKeys):estraverse.VisitorKeys;if(options.fallback==='iteration'){this.__fallback=objectKeys;}else if(typeof options.fallback==='function'){this.__fallback=options.fallback;}}/* Default method for visiting children.\n     * When you need to call default visiting operation inside custom visiting\n     * operation, you can use it with `this.visitChildren(node)`.\n     */Visitor.prototype.visitChildren=function(node){var type,children,i,iz,j,jz,child;if(node==null){return;}type=node.type||estraverse.Syntax.Property;children=this.__childVisitorKeys[type];if(!children){if(this.__fallback){children=this.__fallback(node);}else{throw new Error('Unknown node type '+type+'.');}}for(i=0,iz=children.length;i<iz;++i){child=node[children[i]];if(child){if(isArray(child)){for(j=0,jz=child.length;j<jz;++j){if(child[j]){if(isNode(child[j])||isProperty(type,children[i])){this.visit(child[j]);}}}}else if(isNode(child)){this.visit(child);}}}};/* Dispatching node. */Visitor.prototype.visit=function(node){var type;if(node==null){return;}type=node.type||estraverse.Syntax.Property;if(this.__visitor[type]){this.__visitor[type].call(this,node);return;}this.visitChildren(node);};exports.version=require(\"./package.json\").version;exports.Visitor=Visitor;exports.visit=function(node,visitor,options){var v=new Visitor(visitor,options);v.visit(node);};})();/* vim: set sw=4 ts=4 et tw=80 : */},{\"./package.json\":359,\"estraverse\":357,\"object-assign\":579}],357:[function(require,module,exports){/*\n  Copyright (C) 2012-2013 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*//*jslint vars:false, bitwise:true*//*jshint indent:4*//*global exports:true*/(function clone(exports){'use strict';var Syntax,isArray,VisitorOption,VisitorKeys,objectCreate,objectKeys,BREAK,SKIP,REMOVE;function ignoreJSHintError(){}isArray=Array.isArray;if(!isArray){isArray=function isArray(array){return Object.prototype.toString.call(array)==='[object Array]';};}function deepCopy(obj){var ret={},key,val;for(key in obj){if(obj.hasOwnProperty(key)){val=obj[key];if((typeof val===\"undefined\"?\"undefined\":(0,_typeof6.default)(val))==='object'&&val!==null){ret[key]=deepCopy(val);}else{ret[key]=val;}}}return ret;}function shallowCopy(obj){var ret={},key;for(key in obj){if(obj.hasOwnProperty(key)){ret[key]=obj[key];}}return ret;}ignoreJSHintError(shallowCopy);// based on LLVM libc++ upper_bound / lower_bound\n// MIT License\nfunction upperBound(array,func){var diff,len,i,current;len=array.length;i=0;while(len){diff=len>>>1;current=i+diff;if(func(array[current])){len=diff;}else{i=current+1;len-=diff+1;}}return i;}function lowerBound(array,func){var diff,len,i,current;len=array.length;i=0;while(len){diff=len>>>1;current=i+diff;if(func(array[current])){i=current+1;len-=diff+1;}else{len=diff;}}return i;}ignoreJSHintError(lowerBound);objectCreate=_create4.default||function(){function F(){}return function(o){F.prototype=o;return new F();};}();objectKeys=_keys4.default||function(o){var keys=[],key;for(key in o){keys.push(key);}return keys;};function extend(to,from){var keys=objectKeys(from),key,i,len;for(i=0,len=keys.length;i<len;i+=1){key=keys[i];to[key]=from[key];}return to;}Syntax={AssignmentExpression:'AssignmentExpression',AssignmentPattern:'AssignmentPattern',ArrayExpression:'ArrayExpression',ArrayPattern:'ArrayPattern',ArrowFunctionExpression:'ArrowFunctionExpression',AwaitExpression:'AwaitExpression',// CAUTION: It's deferred to ES7.\nBlockStatement:'BlockStatement',BinaryExpression:'BinaryExpression',BreakStatement:'BreakStatement',CallExpression:'CallExpression',CatchClause:'CatchClause',ClassBody:'ClassBody',ClassDeclaration:'ClassDeclaration',ClassExpression:'ClassExpression',ComprehensionBlock:'ComprehensionBlock',// CAUTION: It's deferred to ES7.\nComprehensionExpression:'ComprehensionExpression',// CAUTION: It's deferred to ES7.\nConditionalExpression:'ConditionalExpression',ContinueStatement:'ContinueStatement',DebuggerStatement:'DebuggerStatement',DirectiveStatement:'DirectiveStatement',DoWhileStatement:'DoWhileStatement',EmptyStatement:'EmptyStatement',ExportAllDeclaration:'ExportAllDeclaration',ExportDefaultDeclaration:'ExportDefaultDeclaration',ExportNamedDeclaration:'ExportNamedDeclaration',ExportSpecifier:'ExportSpecifier',ExpressionStatement:'ExpressionStatement',ForStatement:'ForStatement',ForInStatement:'ForInStatement',ForOfStatement:'ForOfStatement',FunctionDeclaration:'FunctionDeclaration',FunctionExpression:'FunctionExpression',GeneratorExpression:'GeneratorExpression',// CAUTION: It's deferred to ES7.\nIdentifier:'Identifier',IfStatement:'IfStatement',ImportDeclaration:'ImportDeclaration',ImportDefaultSpecifier:'ImportDefaultSpecifier',ImportNamespaceSpecifier:'ImportNamespaceSpecifier',ImportSpecifier:'ImportSpecifier',Literal:'Literal',LabeledStatement:'LabeledStatement',LogicalExpression:'LogicalExpression',MemberExpression:'MemberExpression',MetaProperty:'MetaProperty',MethodDefinition:'MethodDefinition',ModuleSpecifier:'ModuleSpecifier',NewExpression:'NewExpression',ObjectExpression:'ObjectExpression',ObjectPattern:'ObjectPattern',Program:'Program',Property:'Property',RestElement:'RestElement',ReturnStatement:'ReturnStatement',SequenceExpression:'SequenceExpression',SpreadElement:'SpreadElement',Super:'Super',SwitchStatement:'SwitchStatement',SwitchCase:'SwitchCase',TaggedTemplateExpression:'TaggedTemplateExpression',TemplateElement:'TemplateElement',TemplateLiteral:'TemplateLiteral',ThisExpression:'ThisExpression',ThrowStatement:'ThrowStatement',TryStatement:'TryStatement',UnaryExpression:'UnaryExpression',UpdateExpression:'UpdateExpression',VariableDeclaration:'VariableDeclaration',VariableDeclarator:'VariableDeclarator',WhileStatement:'WhileStatement',WithStatement:'WithStatement',YieldExpression:'YieldExpression'};VisitorKeys={AssignmentExpression:['left','right'],AssignmentPattern:['left','right'],ArrayExpression:['elements'],ArrayPattern:['elements'],ArrowFunctionExpression:['params','body'],AwaitExpression:['argument'],// CAUTION: It's deferred to ES7.\nBlockStatement:['body'],BinaryExpression:['left','right'],BreakStatement:['label'],CallExpression:['callee','arguments'],CatchClause:['param','body'],ClassBody:['body'],ClassDeclaration:['id','superClass','body'],ClassExpression:['id','superClass','body'],ComprehensionBlock:['left','right'],// CAUTION: It's deferred to ES7.\nComprehensionExpression:['blocks','filter','body'],// CAUTION: It's deferred to ES7.\nConditionalExpression:['test','consequent','alternate'],ContinueStatement:['label'],DebuggerStatement:[],DirectiveStatement:[],DoWhileStatement:['body','test'],EmptyStatement:[],ExportAllDeclaration:['source'],ExportDefaultDeclaration:['declaration'],ExportNamedDeclaration:['declaration','specifiers','source'],ExportSpecifier:['exported','local'],ExpressionStatement:['expression'],ForStatement:['init','test','update','body'],ForInStatement:['left','right','body'],ForOfStatement:['left','right','body'],FunctionDeclaration:['id','params','body'],FunctionExpression:['id','params','body'],GeneratorExpression:['blocks','filter','body'],// CAUTION: It's deferred to ES7.\nIdentifier:[],IfStatement:['test','consequent','alternate'],ImportDeclaration:['specifiers','source'],ImportDefaultSpecifier:['local'],ImportNamespaceSpecifier:['local'],ImportSpecifier:['imported','local'],Literal:[],LabeledStatement:['label','body'],LogicalExpression:['left','right'],MemberExpression:['object','property'],MetaProperty:['meta','property'],MethodDefinition:['key','value'],ModuleSpecifier:[],NewExpression:['callee','arguments'],ObjectExpression:['properties'],ObjectPattern:['properties'],Program:['body'],Property:['key','value'],RestElement:['argument'],ReturnStatement:['argument'],SequenceExpression:['expressions'],SpreadElement:['argument'],Super:[],SwitchStatement:['discriminant','cases'],SwitchCase:['test','consequent'],TaggedTemplateExpression:['tag','quasi'],TemplateElement:[],TemplateLiteral:['quasis','expressions'],ThisExpression:[],ThrowStatement:['argument'],TryStatement:['block','handler','finalizer'],UnaryExpression:['argument'],UpdateExpression:['argument'],VariableDeclaration:['declarations'],VariableDeclarator:['id','init'],WhileStatement:['test','body'],WithStatement:['object','body'],YieldExpression:['argument']};// unique id\nBREAK={};SKIP={};REMOVE={};VisitorOption={Break:BREAK,Skip:SKIP,Remove:REMOVE};function Reference(parent,key){this.parent=parent;this.key=key;}Reference.prototype.replace=function replace(node){this.parent[this.key]=node;};Reference.prototype.remove=function remove(){if(isArray(this.parent)){this.parent.splice(this.key,1);return true;}else{this.replace(null);return false;}};function Element(node,path,wrap,ref){this.node=node;this.path=path;this.wrap=wrap;this.ref=ref;}function Controller(){}// API:\n// return property path array from root to current node\nController.prototype.path=function path(){var i,iz,j,jz,result,element;function addToPath(result,path){if(isArray(path)){for(j=0,jz=path.length;j<jz;++j){result.push(path[j]);}}else{result.push(path);}}// root node\nif(!this.__current.path){return null;}// first node is sentinel, second node is root element\nresult=[];for(i=2,iz=this.__leavelist.length;i<iz;++i){element=this.__leavelist[i];addToPath(result,element.path);}addToPath(result,this.__current.path);return result;};// API:\n// return type of current node\nController.prototype.type=function(){var node=this.current();return node.type||this.__current.wrap;};// API:\n// return array of parent elements\nController.prototype.parents=function parents(){var i,iz,result;// first node is sentinel\nresult=[];for(i=1,iz=this.__leavelist.length;i<iz;++i){result.push(this.__leavelist[i].node);}return result;};// API:\n// return current node\nController.prototype.current=function current(){return this.__current.node;};Controller.prototype.__execute=function __execute(callback,element){var previous,result;result=undefined;previous=this.__current;this.__current=element;this.__state=null;if(callback){result=callback.call(this,element.node,this.__leavelist[this.__leavelist.length-1].node);}this.__current=previous;return result;};// API:\n// notify control skip / break\nController.prototype.notify=function notify(flag){this.__state=flag;};// API:\n// skip child nodes of current node\nController.prototype.skip=function(){this.notify(SKIP);};// API:\n// break traversals\nController.prototype['break']=function(){this.notify(BREAK);};// API:\n// remove node\nController.prototype.remove=function(){this.notify(REMOVE);};Controller.prototype.__initialize=function(root,visitor){this.visitor=visitor;this.root=root;this.__worklist=[];this.__leavelist=[];this.__current=null;this.__state=null;this.__fallback=visitor.fallback==='iteration';this.__keys=VisitorKeys;if(visitor.keys){this.__keys=extend(objectCreate(this.__keys),visitor.keys);}};function isNode(node){if(node==null){return false;}return(typeof node===\"undefined\"?\"undefined\":(0,_typeof6.default)(node))==='object'&&typeof node.type==='string';}function isProperty(nodeType,key){return(nodeType===Syntax.ObjectExpression||nodeType===Syntax.ObjectPattern)&&'properties'===key;}Controller.prototype.traverse=function traverse(root,visitor){var worklist,leavelist,element,node,nodeType,ret,key,current,current2,candidates,candidate,sentinel;this.__initialize(root,visitor);sentinel={};// reference\nworklist=this.__worklist;leavelist=this.__leavelist;// initialize\nworklist.push(new Element(root,null,null,null));leavelist.push(new Element(null,null,null,null));while(worklist.length){element=worklist.pop();if(element===sentinel){element=leavelist.pop();ret=this.__execute(visitor.leave,element);if(this.__state===BREAK||ret===BREAK){return;}continue;}if(element.node){ret=this.__execute(visitor.enter,element);if(this.__state===BREAK||ret===BREAK){return;}worklist.push(sentinel);leavelist.push(element);if(this.__state===SKIP||ret===SKIP){continue;}node=element.node;nodeType=node.type||element.wrap;candidates=this.__keys[nodeType];if(!candidates){if(this.__fallback){candidates=objectKeys(node);}else{throw new Error('Unknown node type '+nodeType+'.');}}current=candidates.length;while((current-=1)>=0){key=candidates[current];candidate=node[key];if(!candidate){continue;}if(isArray(candidate)){current2=candidate.length;while((current2-=1)>=0){if(!candidate[current2]){continue;}if(isProperty(nodeType,candidates[current])){element=new Element(candidate[current2],[key,current2],'Property',null);}else if(isNode(candidate[current2])){element=new Element(candidate[current2],[key,current2],null,null);}else{continue;}worklist.push(element);}}else if(isNode(candidate)){worklist.push(new Element(candidate,key,null,null));}}}}};Controller.prototype.replace=function replace(root,visitor){function removeElem(element){var i,key,nextElem,parent;if(element.ref.remove()){// When the reference is an element of an array.\nkey=element.ref.key;parent=element.ref.parent;// If removed from array, then decrease following items' keys.\ni=worklist.length;while(i--){nextElem=worklist[i];if(nextElem.ref&&nextElem.ref.parent===parent){if(nextElem.ref.key<key){break;}--nextElem.ref.key;}}}}var worklist,leavelist,node,nodeType,target,element,current,current2,candidates,candidate,sentinel,outer,key;this.__initialize(root,visitor);sentinel={};// reference\nworklist=this.__worklist;leavelist=this.__leavelist;// initialize\nouter={root:root};element=new Element(root,null,null,new Reference(outer,'root'));worklist.push(element);leavelist.push(element);while(worklist.length){element=worklist.pop();if(element===sentinel){element=leavelist.pop();target=this.__execute(visitor.leave,element);// node may be replaced with null,\n// so distinguish between undefined and null in this place\nif(target!==undefined&&target!==BREAK&&target!==SKIP&&target!==REMOVE){// replace\nelement.ref.replace(target);}if(this.__state===REMOVE||target===REMOVE){removeElem(element);}if(this.__state===BREAK||target===BREAK){return outer.root;}continue;}target=this.__execute(visitor.enter,element);// node may be replaced with null,\n// so distinguish between undefined and null in this place\nif(target!==undefined&&target!==BREAK&&target!==SKIP&&target!==REMOVE){// replace\nelement.ref.replace(target);element.node=target;}if(this.__state===REMOVE||target===REMOVE){removeElem(element);element.node=null;}if(this.__state===BREAK||target===BREAK){return outer.root;}// node may be null\nnode=element.node;if(!node){continue;}worklist.push(sentinel);leavelist.push(element);if(this.__state===SKIP||target===SKIP){continue;}nodeType=node.type||element.wrap;candidates=this.__keys[nodeType];if(!candidates){if(this.__fallback){candidates=objectKeys(node);}else{throw new Error('Unknown node type '+nodeType+'.');}}current=candidates.length;while((current-=1)>=0){key=candidates[current];candidate=node[key];if(!candidate){continue;}if(isArray(candidate)){current2=candidate.length;while((current2-=1)>=0){if(!candidate[current2]){continue;}if(isProperty(nodeType,candidates[current])){element=new Element(candidate[current2],[key,current2],'Property',new Reference(candidate,current2));}else if(isNode(candidate[current2])){element=new Element(candidate[current2],[key,current2],null,new Reference(candidate,current2));}else{continue;}worklist.push(element);}}else if(isNode(candidate)){worklist.push(new Element(candidate,key,null,new Reference(node,key)));}}}return outer.root;};function traverse(root,visitor){var controller=new Controller();return controller.traverse(root,visitor);}function replace(root,visitor){var controller=new Controller();return controller.replace(root,visitor);}function extendCommentRange(comment,tokens){var target;target=upperBound(tokens,function search(token){return token.range[0]>comment.range[0];});comment.extendedRange=[comment.range[0],comment.range[1]];if(target!==tokens.length){comment.extendedRange[1]=tokens[target].range[0];}target-=1;if(target>=0){comment.extendedRange[0]=tokens[target].range[1];}return comment;}function attachComments(tree,providedComments,tokens){// At first, we should calculate extended comment ranges.\nvar comments=[],comment,len,i,cursor;if(!tree.range){throw new Error('attachComments needs range information');}// tokens array is empty, we attach comments to tree as 'leadingComments'\nif(!tokens.length){if(providedComments.length){for(i=0,len=providedComments.length;i<len;i+=1){comment=deepCopy(providedComments[i]);comment.extendedRange=[0,tree.range[0]];comments.push(comment);}tree.leadingComments=comments;}return tree;}for(i=0,len=providedComments.length;i<len;i+=1){comments.push(extendCommentRange(deepCopy(providedComments[i]),tokens));}// This is based on John Freeman's implementation.\ncursor=0;traverse(tree,{enter:function enter(node){var comment;while(cursor<comments.length){comment=comments[cursor];if(comment.extendedRange[1]>node.range[0]){break;}if(comment.extendedRange[1]===node.range[0]){if(!node.leadingComments){node.leadingComments=[];}node.leadingComments.push(comment);comments.splice(cursor,1);}else{cursor+=1;}}// already out of owned node\nif(cursor===comments.length){return VisitorOption.Break;}if(comments[cursor].extendedRange[0]>node.range[1]){return VisitorOption.Skip;}}});cursor=0;traverse(tree,{leave:function leave(node){var comment;while(cursor<comments.length){comment=comments[cursor];if(node.range[1]<comment.extendedRange[0]){break;}if(node.range[1]===comment.extendedRange[0]){if(!node.trailingComments){node.trailingComments=[];}node.trailingComments.push(comment);comments.splice(cursor,1);}else{cursor+=1;}}// already out of owned node\nif(cursor===comments.length){return VisitorOption.Break;}if(comments[cursor].extendedRange[0]>node.range[1]){return VisitorOption.Skip;}}});return tree;}exports.version=require(\"./package.json\").version;exports.Syntax=Syntax;exports.traverse=traverse;exports.replace=replace;exports.attachComments=attachComments;exports.VisitorKeys=VisitorKeys;exports.VisitorOption=VisitorOption;exports.Controller=Controller;exports.cloneEnvironment=function(){return clone({});};return exports;})(exports);/* vim: set sw=4 ts=4 et tw=80 : */},{\"./package.json\":358}],358:[function(require,module,exports){module.exports={\"name\":\"estraverse\",\"description\":\"ECMAScript JS AST traversal functions\",\"homepage\":\"https://github.com/estools/estraverse\",\"main\":\"estraverse.js\",\"version\":\"4.1.1\",\"engines\":{\"node\":\">=0.10.0\"},\"maintainers\":[{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"web\":\"http://github.com/Constellation\"}],\"repository\":{\"type\":\"git\",\"url\":\"http://github.com/estools/estraverse.git\"},\"devDependencies\":{\"chai\":\"^2.1.1\",\"coffee-script\":\"^1.8.0\",\"espree\":\"^1.11.0\",\"gulp\":\"^3.8.10\",\"gulp-bump\":\"^0.2.2\",\"gulp-filter\":\"^2.0.0\",\"gulp-git\":\"^1.0.1\",\"gulp-tag-version\":\"^1.2.1\",\"jshint\":\"^2.5.6\",\"mocha\":\"^2.1.0\"},\"license\":\"BSD-2-Clause\",\"scripts\":{\"test\":\"npm run-script lint && npm run-script unit-test\",\"lint\":\"jshint estraverse.js\",\"unit-test\":\"mocha --compilers coffee:coffee-script/register\"}};},{}],359:[function(require,module,exports){module.exports={\"name\":\"esrecurse\",\"description\":\"ECMAScript AST recursive visitor\",\"homepage\":\"https://github.com/estools/esrecurse\",\"main\":\"esrecurse.js\",\"version\":\"4.1.0\",\"engines\":{\"node\":\">=0.10.0\"},\"maintainers\":[{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"web\":\"https://github.com/Constellation\"}],\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/estools/esrecurse.git\"},\"dependencies\":{\"estraverse\":\"~4.1.0\",\"object-assign\":\"^4.0.1\"},\"devDependencies\":{\"chai\":\"^3.3.0\",\"coffee-script\":\"^1.9.1\",\"esprima\":\"^2.1.0\",\"gulp\":\"^3.9.0\",\"gulp-bump\":\"^1.0.0\",\"gulp-eslint\":\"^1.0.0\",\"gulp-filter\":\"^3.0.1\",\"gulp-git\":\"^1.1.0\",\"gulp-mocha\":\"^2.1.3\",\"gulp-tag-version\":\"^1.2.1\",\"jsdoc\":\"^3.3.0-alpha10\",\"minimist\":\"^1.1.0\"},\"license\":\"BSD-2-Clause\",\"scripts\":{\"test\":\"gulp travis\",\"unit-test\":\"gulp test\",\"lint\":\"gulp lint\"}};},{}],360:[function(require,module,exports){/*\n  Copyright (C) 2012-2013 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*//*jslint vars:false, bitwise:true*//*jshint indent:4*//*global exports:true*/(function clone(exports){'use strict';var Syntax,isArray,VisitorOption,VisitorKeys,objectCreate,objectKeys,BREAK,SKIP,REMOVE;function ignoreJSHintError(){}isArray=Array.isArray;if(!isArray){isArray=function isArray(array){return Object.prototype.toString.call(array)==='[object Array]';};}function deepCopy(obj){var ret={},key,val;for(key in obj){if(obj.hasOwnProperty(key)){val=obj[key];if((typeof val===\"undefined\"?\"undefined\":(0,_typeof6.default)(val))==='object'&&val!==null){ret[key]=deepCopy(val);}else{ret[key]=val;}}}return ret;}function shallowCopy(obj){var ret={},key;for(key in obj){if(obj.hasOwnProperty(key)){ret[key]=obj[key];}}return ret;}ignoreJSHintError(shallowCopy);// based on LLVM libc++ upper_bound / lower_bound\n// MIT License\nfunction upperBound(array,func){var diff,len,i,current;len=array.length;i=0;while(len){diff=len>>>1;current=i+diff;if(func(array[current])){len=diff;}else{i=current+1;len-=diff+1;}}return i;}function lowerBound(array,func){var diff,len,i,current;len=array.length;i=0;while(len){diff=len>>>1;current=i+diff;if(func(array[current])){i=current+1;len-=diff+1;}else{len=diff;}}return i;}ignoreJSHintError(lowerBound);objectCreate=_create4.default||function(){function F(){}return function(o){F.prototype=o;return new F();};}();objectKeys=_keys4.default||function(o){var keys=[],key;for(key in o){keys.push(key);}return keys;};function extend(to,from){var keys=objectKeys(from),key,i,len;for(i=0,len=keys.length;i<len;i+=1){key=keys[i];to[key]=from[key];}return to;}Syntax={AssignmentExpression:'AssignmentExpression',AssignmentPattern:'AssignmentPattern',ArrayExpression:'ArrayExpression',ArrayPattern:'ArrayPattern',ArrowFunctionExpression:'ArrowFunctionExpression',AwaitExpression:'AwaitExpression',// CAUTION: It's deferred to ES7.\nBlockStatement:'BlockStatement',BinaryExpression:'BinaryExpression',BreakStatement:'BreakStatement',CallExpression:'CallExpression',CatchClause:'CatchClause',ClassBody:'ClassBody',ClassDeclaration:'ClassDeclaration',ClassExpression:'ClassExpression',ComprehensionBlock:'ComprehensionBlock',// CAUTION: It's deferred to ES7.\nComprehensionExpression:'ComprehensionExpression',// CAUTION: It's deferred to ES7.\nConditionalExpression:'ConditionalExpression',ContinueStatement:'ContinueStatement',DebuggerStatement:'DebuggerStatement',DirectiveStatement:'DirectiveStatement',DoWhileStatement:'DoWhileStatement',EmptyStatement:'EmptyStatement',ExportAllDeclaration:'ExportAllDeclaration',ExportDefaultDeclaration:'ExportDefaultDeclaration',ExportNamedDeclaration:'ExportNamedDeclaration',ExportSpecifier:'ExportSpecifier',ExpressionStatement:'ExpressionStatement',ForStatement:'ForStatement',ForInStatement:'ForInStatement',ForOfStatement:'ForOfStatement',FunctionDeclaration:'FunctionDeclaration',FunctionExpression:'FunctionExpression',GeneratorExpression:'GeneratorExpression',// CAUTION: It's deferred to ES7.\nIdentifier:'Identifier',IfStatement:'IfStatement',ImportDeclaration:'ImportDeclaration',ImportDefaultSpecifier:'ImportDefaultSpecifier',ImportNamespaceSpecifier:'ImportNamespaceSpecifier',ImportSpecifier:'ImportSpecifier',Literal:'Literal',LabeledStatement:'LabeledStatement',LogicalExpression:'LogicalExpression',MemberExpression:'MemberExpression',MetaProperty:'MetaProperty',MethodDefinition:'MethodDefinition',ModuleSpecifier:'ModuleSpecifier',NewExpression:'NewExpression',ObjectExpression:'ObjectExpression',ObjectPattern:'ObjectPattern',Program:'Program',Property:'Property',RestElement:'RestElement',ReturnStatement:'ReturnStatement',SequenceExpression:'SequenceExpression',SpreadElement:'SpreadElement',Super:'Super',SwitchStatement:'SwitchStatement',SwitchCase:'SwitchCase',TaggedTemplateExpression:'TaggedTemplateExpression',TemplateElement:'TemplateElement',TemplateLiteral:'TemplateLiteral',ThisExpression:'ThisExpression',ThrowStatement:'ThrowStatement',TryStatement:'TryStatement',UnaryExpression:'UnaryExpression',UpdateExpression:'UpdateExpression',VariableDeclaration:'VariableDeclaration',VariableDeclarator:'VariableDeclarator',WhileStatement:'WhileStatement',WithStatement:'WithStatement',YieldExpression:'YieldExpression'};VisitorKeys={AssignmentExpression:['left','right'],AssignmentPattern:['left','right'],ArrayExpression:['elements'],ArrayPattern:['elements'],ArrowFunctionExpression:['params','body'],AwaitExpression:['argument'],// CAUTION: It's deferred to ES7.\nBlockStatement:['body'],BinaryExpression:['left','right'],BreakStatement:['label'],CallExpression:['callee','arguments'],CatchClause:['param','body'],ClassBody:['body'],ClassDeclaration:['id','superClass','body'],ClassExpression:['id','superClass','body'],ComprehensionBlock:['left','right'],// CAUTION: It's deferred to ES7.\nComprehensionExpression:['blocks','filter','body'],// CAUTION: It's deferred to ES7.\nConditionalExpression:['test','consequent','alternate'],ContinueStatement:['label'],DebuggerStatement:[],DirectiveStatement:[],DoWhileStatement:['body','test'],EmptyStatement:[],ExportAllDeclaration:['source'],ExportDefaultDeclaration:['declaration'],ExportNamedDeclaration:['declaration','specifiers','source'],ExportSpecifier:['exported','local'],ExpressionStatement:['expression'],ForStatement:['init','test','update','body'],ForInStatement:['left','right','body'],ForOfStatement:['left','right','body'],FunctionDeclaration:['id','params','body'],FunctionExpression:['id','params','body'],GeneratorExpression:['blocks','filter','body'],// CAUTION: It's deferred to ES7.\nIdentifier:[],IfStatement:['test','consequent','alternate'],ImportDeclaration:['specifiers','source'],ImportDefaultSpecifier:['local'],ImportNamespaceSpecifier:['local'],ImportSpecifier:['imported','local'],Literal:[],LabeledStatement:['label','body'],LogicalExpression:['left','right'],MemberExpression:['object','property'],MetaProperty:['meta','property'],MethodDefinition:['key','value'],ModuleSpecifier:[],NewExpression:['callee','arguments'],ObjectExpression:['properties'],ObjectPattern:['properties'],Program:['body'],Property:['key','value'],RestElement:['argument'],ReturnStatement:['argument'],SequenceExpression:['expressions'],SpreadElement:['argument'],Super:[],SwitchStatement:['discriminant','cases'],SwitchCase:['test','consequent'],TaggedTemplateExpression:['tag','quasi'],TemplateElement:[],TemplateLiteral:['quasis','expressions'],ThisExpression:[],ThrowStatement:['argument'],TryStatement:['block','handler','finalizer'],UnaryExpression:['argument'],UpdateExpression:['argument'],VariableDeclaration:['declarations'],VariableDeclarator:['id','init'],WhileStatement:['test','body'],WithStatement:['object','body'],YieldExpression:['argument']};// unique id\nBREAK={};SKIP={};REMOVE={};VisitorOption={Break:BREAK,Skip:SKIP,Remove:REMOVE};function Reference(parent,key){this.parent=parent;this.key=key;}Reference.prototype.replace=function replace(node){this.parent[this.key]=node;};Reference.prototype.remove=function remove(){if(isArray(this.parent)){this.parent.splice(this.key,1);return true;}else{this.replace(null);return false;}};function Element(node,path,wrap,ref){this.node=node;this.path=path;this.wrap=wrap;this.ref=ref;}function Controller(){}// API:\n// return property path array from root to current node\nController.prototype.path=function path(){var i,iz,j,jz,result,element;function addToPath(result,path){if(isArray(path)){for(j=0,jz=path.length;j<jz;++j){result.push(path[j]);}}else{result.push(path);}}// root node\nif(!this.__current.path){return null;}// first node is sentinel, second node is root element\nresult=[];for(i=2,iz=this.__leavelist.length;i<iz;++i){element=this.__leavelist[i];addToPath(result,element.path);}addToPath(result,this.__current.path);return result;};// API:\n// return type of current node\nController.prototype.type=function(){var node=this.current();return node.type||this.__current.wrap;};// API:\n// return array of parent elements\nController.prototype.parents=function parents(){var i,iz,result;// first node is sentinel\nresult=[];for(i=1,iz=this.__leavelist.length;i<iz;++i){result.push(this.__leavelist[i].node);}return result;};// API:\n// return current node\nController.prototype.current=function current(){return this.__current.node;};Controller.prototype.__execute=function __execute(callback,element){var previous,result;result=undefined;previous=this.__current;this.__current=element;this.__state=null;if(callback){result=callback.call(this,element.node,this.__leavelist[this.__leavelist.length-1].node);}this.__current=previous;return result;};// API:\n// notify control skip / break\nController.prototype.notify=function notify(flag){this.__state=flag;};// API:\n// skip child nodes of current node\nController.prototype.skip=function(){this.notify(SKIP);};// API:\n// break traversals\nController.prototype['break']=function(){this.notify(BREAK);};// API:\n// remove node\nController.prototype.remove=function(){this.notify(REMOVE);};Controller.prototype.__initialize=function(root,visitor){this.visitor=visitor;this.root=root;this.__worklist=[];this.__leavelist=[];this.__current=null;this.__state=null;this.__fallback=null;if(visitor.fallback==='iteration'){this.__fallback=objectKeys;}else if(typeof visitor.fallback==='function'){this.__fallback=visitor.fallback;}this.__keys=VisitorKeys;if(visitor.keys){this.__keys=extend(objectCreate(this.__keys),visitor.keys);}};function isNode(node){if(node==null){return false;}return(typeof node===\"undefined\"?\"undefined\":(0,_typeof6.default)(node))==='object'&&typeof node.type==='string';}function isProperty(nodeType,key){return(nodeType===Syntax.ObjectExpression||nodeType===Syntax.ObjectPattern)&&'properties'===key;}Controller.prototype.traverse=function traverse(root,visitor){var worklist,leavelist,element,node,nodeType,ret,key,current,current2,candidates,candidate,sentinel;this.__initialize(root,visitor);sentinel={};// reference\nworklist=this.__worklist;leavelist=this.__leavelist;// initialize\nworklist.push(new Element(root,null,null,null));leavelist.push(new Element(null,null,null,null));while(worklist.length){element=worklist.pop();if(element===sentinel){element=leavelist.pop();ret=this.__execute(visitor.leave,element);if(this.__state===BREAK||ret===BREAK){return;}continue;}if(element.node){ret=this.__execute(visitor.enter,element);if(this.__state===BREAK||ret===BREAK){return;}worklist.push(sentinel);leavelist.push(element);if(this.__state===SKIP||ret===SKIP){continue;}node=element.node;nodeType=node.type||element.wrap;candidates=this.__keys[nodeType];if(!candidates){if(this.__fallback){candidates=this.__fallback(node);}else{throw new Error('Unknown node type '+nodeType+'.');}}current=candidates.length;while((current-=1)>=0){key=candidates[current];candidate=node[key];if(!candidate){continue;}if(isArray(candidate)){current2=candidate.length;while((current2-=1)>=0){if(!candidate[current2]){continue;}if(isProperty(nodeType,candidates[current])){element=new Element(candidate[current2],[key,current2],'Property',null);}else if(isNode(candidate[current2])){element=new Element(candidate[current2],[key,current2],null,null);}else{continue;}worklist.push(element);}}else if(isNode(candidate)){worklist.push(new Element(candidate,key,null,null));}}}}};Controller.prototype.replace=function replace(root,visitor){var worklist,leavelist,node,nodeType,target,element,current,current2,candidates,candidate,sentinel,outer,key;function removeElem(element){var i,key,nextElem,parent;if(element.ref.remove()){// When the reference is an element of an array.\nkey=element.ref.key;parent=element.ref.parent;// If removed from array, then decrease following items' keys.\ni=worklist.length;while(i--){nextElem=worklist[i];if(nextElem.ref&&nextElem.ref.parent===parent){if(nextElem.ref.key<key){break;}--nextElem.ref.key;}}}}this.__initialize(root,visitor);sentinel={};// reference\nworklist=this.__worklist;leavelist=this.__leavelist;// initialize\nouter={root:root};element=new Element(root,null,null,new Reference(outer,'root'));worklist.push(element);leavelist.push(element);while(worklist.length){element=worklist.pop();if(element===sentinel){element=leavelist.pop();target=this.__execute(visitor.leave,element);// node may be replaced with null,\n// so distinguish between undefined and null in this place\nif(target!==undefined&&target!==BREAK&&target!==SKIP&&target!==REMOVE){// replace\nelement.ref.replace(target);}if(this.__state===REMOVE||target===REMOVE){removeElem(element);}if(this.__state===BREAK||target===BREAK){return outer.root;}continue;}target=this.__execute(visitor.enter,element);// node may be replaced with null,\n// so distinguish between undefined and null in this place\nif(target!==undefined&&target!==BREAK&&target!==SKIP&&target!==REMOVE){// replace\nelement.ref.replace(target);element.node=target;}if(this.__state===REMOVE||target===REMOVE){removeElem(element);element.node=null;}if(this.__state===BREAK||target===BREAK){return outer.root;}// node may be null\nnode=element.node;if(!node){continue;}worklist.push(sentinel);leavelist.push(element);if(this.__state===SKIP||target===SKIP){continue;}nodeType=node.type||element.wrap;candidates=this.__keys[nodeType];if(!candidates){if(this.__fallback){candidates=this.__fallback(node);}else{throw new Error('Unknown node type '+nodeType+'.');}}current=candidates.length;while((current-=1)>=0){key=candidates[current];candidate=node[key];if(!candidate){continue;}if(isArray(candidate)){current2=candidate.length;while((current2-=1)>=0){if(!candidate[current2]){continue;}if(isProperty(nodeType,candidates[current])){element=new Element(candidate[current2],[key,current2],'Property',new Reference(candidate,current2));}else if(isNode(candidate[current2])){element=new Element(candidate[current2],[key,current2],null,new Reference(candidate,current2));}else{continue;}worklist.push(element);}}else if(isNode(candidate)){worklist.push(new Element(candidate,key,null,new Reference(node,key)));}}}return outer.root;};function traverse(root,visitor){var controller=new Controller();return controller.traverse(root,visitor);}function replace(root,visitor){var controller=new Controller();return controller.replace(root,visitor);}function extendCommentRange(comment,tokens){var target;target=upperBound(tokens,function search(token){return token.range[0]>comment.range[0];});comment.extendedRange=[comment.range[0],comment.range[1]];if(target!==tokens.length){comment.extendedRange[1]=tokens[target].range[0];}target-=1;if(target>=0){comment.extendedRange[0]=tokens[target].range[1];}return comment;}function attachComments(tree,providedComments,tokens){// At first, we should calculate extended comment ranges.\nvar comments=[],comment,len,i,cursor;if(!tree.range){throw new Error('attachComments needs range information');}// tokens array is empty, we attach comments to tree as 'leadingComments'\nif(!tokens.length){if(providedComments.length){for(i=0,len=providedComments.length;i<len;i+=1){comment=deepCopy(providedComments[i]);comment.extendedRange=[0,tree.range[0]];comments.push(comment);}tree.leadingComments=comments;}return tree;}for(i=0,len=providedComments.length;i<len;i+=1){comments.push(extendCommentRange(deepCopy(providedComments[i]),tokens));}// This is based on John Freeman's implementation.\ncursor=0;traverse(tree,{enter:function enter(node){var comment;while(cursor<comments.length){comment=comments[cursor];if(comment.extendedRange[1]>node.range[0]){break;}if(comment.extendedRange[1]===node.range[0]){if(!node.leadingComments){node.leadingComments=[];}node.leadingComments.push(comment);comments.splice(cursor,1);}else{cursor+=1;}}// already out of owned node\nif(cursor===comments.length){return VisitorOption.Break;}if(comments[cursor].extendedRange[0]>node.range[1]){return VisitorOption.Skip;}}});cursor=0;traverse(tree,{leave:function leave(node){var comment;while(cursor<comments.length){comment=comments[cursor];if(node.range[1]<comment.extendedRange[0]){break;}if(node.range[1]===comment.extendedRange[0]){if(!node.trailingComments){node.trailingComments=[];}node.trailingComments.push(comment);comments.splice(cursor,1);}else{cursor+=1;}}// already out of owned node\nif(cursor===comments.length){return VisitorOption.Break;}if(comments[cursor].extendedRange[0]>node.range[1]){return VisitorOption.Skip;}}});return tree;}exports.version=require(\"./package.json\").version;exports.Syntax=Syntax;exports.traverse=traverse;exports.replace=replace;exports.attachComments=attachComments;exports.VisitorKeys=VisitorKeys;exports.VisitorOption=VisitorOption;exports.Controller=Controller;exports.cloneEnvironment=function(){return clone({});};return exports;})(exports);/* vim: set sw=4 ts=4 et tw=80 : */},{\"./package.json\":361}],361:[function(require,module,exports){module.exports={\"name\":\"estraverse\",\"description\":\"ECMAScript JS AST traversal functions\",\"homepage\":\"https://github.com/estools/estraverse\",\"main\":\"estraverse.js\",\"version\":\"4.2.0\",\"engines\":{\"node\":\">=0.10.0\"},\"maintainers\":[{\"name\":\"Yusuke Suzuki\",\"email\":\"utatane.tea@gmail.com\",\"web\":\"http://github.com/Constellation\"}],\"repository\":{\"type\":\"git\",\"url\":\"http://github.com/estools/estraverse.git\"},\"devDependencies\":{\"babel-preset-es2015\":\"^6.3.13\",\"babel-register\":\"^6.3.13\",\"chai\":\"^2.1.1\",\"espree\":\"^1.11.0\",\"gulp\":\"^3.8.10\",\"gulp-bump\":\"^0.2.2\",\"gulp-filter\":\"^2.0.0\",\"gulp-git\":\"^1.0.1\",\"gulp-tag-version\":\"^1.2.1\",\"jshint\":\"^2.5.6\",\"mocha\":\"^2.1.0\"},\"license\":\"BSD-2-Clause\",\"scripts\":{\"test\":\"npm run-script lint && npm run-script unit-test\",\"lint\":\"jshint estraverse.js\",\"unit-test\":\"mocha --compilers js:babel-register\"}};},{}],362:[function(require,module,exports){/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';function isExpression(node){if(node==null){return false;}switch(node.type){case'ArrayExpression':case'AssignmentExpression':case'BinaryExpression':case'CallExpression':case'ConditionalExpression':case'FunctionExpression':case'Identifier':case'Literal':case'LogicalExpression':case'MemberExpression':case'NewExpression':case'ObjectExpression':case'SequenceExpression':case'ThisExpression':case'UnaryExpression':case'UpdateExpression':return true;}return false;}function isIterationStatement(node){if(node==null){return false;}switch(node.type){case'DoWhileStatement':case'ForInStatement':case'ForStatement':case'WhileStatement':return true;}return false;}function isStatement(node){if(node==null){return false;}switch(node.type){case'BlockStatement':case'BreakStatement':case'ContinueStatement':case'DebuggerStatement':case'DoWhileStatement':case'EmptyStatement':case'ExpressionStatement':case'ForInStatement':case'ForStatement':case'IfStatement':case'LabeledStatement':case'ReturnStatement':case'SwitchStatement':case'ThrowStatement':case'TryStatement':case'VariableDeclaration':case'WhileStatement':case'WithStatement':return true;}return false;}function isSourceElement(node){return isStatement(node)||node!=null&&node.type==='FunctionDeclaration';}function trailingStatement(node){switch(node.type){case'IfStatement':if(node.alternate!=null){return node.alternate;}return node.consequent;case'LabeledStatement':case'ForStatement':case'ForInStatement':case'WhileStatement':case'WithStatement':return node.body;}return null;}function isProblematicIfStatement(node){var current;if(node.type!=='IfStatement'){return false;}if(node.alternate==null){return false;}current=node.consequent;do{if(current.type==='IfStatement'){if(current.alternate==null){return true;}}current=trailingStatement(current);}while(current);return false;}module.exports={isExpression:isExpression,isStatement:isStatement,isIterationStatement:isIterationStatement,isSourceElement:isSourceElement,isProblematicIfStatement:isProblematicIfStatement,trailingStatement:trailingStatement};})();/* vim: set sw=4 ts=4 et tw=80 : */},{}],363:[function(require,module,exports){/*\n  Copyright (C) 2013-2014 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2014 Ivan Nikulin <ifaaan@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';var ES6Regex,ES5Regex,NON_ASCII_WHITESPACES,IDENTIFIER_START,IDENTIFIER_PART,ch;// See `tools/generate-identifier-regex.js`.\nES5Regex={// ECMAScript 5.1/Unicode v7.0.0 NonAsciiIdentifierStart:\nNonAsciiIdentifierStart:/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\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-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\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-\\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\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\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\\u2160-\\u2188\\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-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\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-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\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]/,// ECMAScript 5.1/Unicode v7.0.0 NonAsciiIdentifierPart:\nNonAsciiIdentifierPart:/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\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\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\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\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\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-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/};ES6Regex={// ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart:\nNonAsciiIdentifierStart:/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\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-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\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-\\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\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\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\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\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\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\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-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\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]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/,// ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart:\nNonAsciiIdentifierPart:/[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\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\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\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\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDD0-\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF01-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/};function isDecimalDigit(ch){return 0x30<=ch&&ch<=0x39;// 0..9\n}function isHexDigit(ch){return 0x30<=ch&&ch<=0x39||// 0..9\n0x61<=ch&&ch<=0x66||// a..f\n0x41<=ch&&ch<=0x46;// A..F\n}function isOctalDigit(ch){return ch>=0x30&&ch<=0x37;// 0..7\n}// 7.2 White Space\nNON_ASCII_WHITESPACES=[0x1680,0x180E,0x2000,0x2001,0x2002,0x2003,0x2004,0x2005,0x2006,0x2007,0x2008,0x2009,0x200A,0x202F,0x205F,0x3000,0xFEFF];function isWhiteSpace(ch){return ch===0x20||ch===0x09||ch===0x0B||ch===0x0C||ch===0xA0||ch>=0x1680&&NON_ASCII_WHITESPACES.indexOf(ch)>=0;}// 7.3 Line Terminators\nfunction isLineTerminator(ch){return ch===0x0A||ch===0x0D||ch===0x2028||ch===0x2029;}// 7.6 Identifier Names and Identifiers\nfunction fromCodePoint(cp){if(cp<=0xFFFF){return String.fromCharCode(cp);}var cu1=String.fromCharCode(Math.floor((cp-0x10000)/0x400)+0xD800);var cu2=String.fromCharCode((cp-0x10000)%0x400+0xDC00);return cu1+cu2;}IDENTIFIER_START=new Array(0x80);for(ch=0;ch<0x80;++ch){IDENTIFIER_START[ch]=ch>=0x61&&ch<=0x7A||// a..z\nch>=0x41&&ch<=0x5A||// A..Z\nch===0x24||ch===0x5F;// $ (dollar) and _ (underscore)\n}IDENTIFIER_PART=new Array(0x80);for(ch=0;ch<0x80;++ch){IDENTIFIER_PART[ch]=ch>=0x61&&ch<=0x7A||// a..z\nch>=0x41&&ch<=0x5A||// A..Z\nch>=0x30&&ch<=0x39||// 0..9\nch===0x24||ch===0x5F;// $ (dollar) and _ (underscore)\n}function isIdentifierStartES5(ch){return ch<0x80?IDENTIFIER_START[ch]:ES5Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch));}function isIdentifierPartES5(ch){return ch<0x80?IDENTIFIER_PART[ch]:ES5Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch));}function isIdentifierStartES6(ch){return ch<0x80?IDENTIFIER_START[ch]:ES6Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch));}function isIdentifierPartES6(ch){return ch<0x80?IDENTIFIER_PART[ch]:ES6Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch));}module.exports={isDecimalDigit:isDecimalDigit,isHexDigit:isHexDigit,isOctalDigit:isOctalDigit,isWhiteSpace:isWhiteSpace,isLineTerminator:isLineTerminator,isIdentifierStartES5:isIdentifierStartES5,isIdentifierPartES5:isIdentifierPartES5,isIdentifierStartES6:isIdentifierStartES6,isIdentifierPartES6:isIdentifierPartES6};})();/* vim: set sw=4 ts=4 et tw=80 : */},{}],364:[function(require,module,exports){/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';var code=require(\"./code\");function isStrictModeReservedWordES6(id){switch(id){case'implements':case'interface':case'package':case'private':case'protected':case'public':case'static':case'let':return true;default:return false;}}function isKeywordES5(id,strict){// yield should not be treated as keyword under non-strict mode.\nif(!strict&&id==='yield'){return false;}return isKeywordES6(id,strict);}function isKeywordES6(id,strict){if(strict&&isStrictModeReservedWordES6(id)){return true;}switch(id.length){case 2:return id==='if'||id==='in'||id==='do';case 3:return id==='var'||id==='for'||id==='new'||id==='try';case 4:return id==='this'||id==='else'||id==='case'||id==='void'||id==='with'||id==='enum';case 5:return id==='while'||id==='break'||id==='catch'||id==='throw'||id==='const'||id==='yield'||id==='class'||id==='super';case 6:return id==='return'||id==='typeof'||id==='delete'||id==='switch'||id==='export'||id==='import';case 7:return id==='default'||id==='finally'||id==='extends';case 8:return id==='function'||id==='continue'||id==='debugger';case 10:return id==='instanceof';default:return false;}}function isReservedWordES5(id,strict){return id==='null'||id==='true'||id==='false'||isKeywordES5(id,strict);}function isReservedWordES6(id,strict){return id==='null'||id==='true'||id==='false'||isKeywordES6(id,strict);}function isRestrictedWord(id){return id==='eval'||id==='arguments';}function isIdentifierNameES5(id){var i,iz,ch;if(id.length===0){return false;}ch=id.charCodeAt(0);if(!code.isIdentifierStartES5(ch)){return false;}for(i=1,iz=id.length;i<iz;++i){ch=id.charCodeAt(i);if(!code.isIdentifierPartES5(ch)){return false;}}return true;}function decodeUtf16(lead,trail){return(lead-0xD800)*0x400+(trail-0xDC00)+0x10000;}function isIdentifierNameES6(id){var i,iz,ch,lowCh,check;if(id.length===0){return false;}check=code.isIdentifierStartES6;for(i=0,iz=id.length;i<iz;++i){ch=id.charCodeAt(i);if(0xD800<=ch&&ch<=0xDBFF){++i;if(i>=iz){return false;}lowCh=id.charCodeAt(i);if(!(0xDC00<=lowCh&&lowCh<=0xDFFF)){return false;}ch=decodeUtf16(ch,lowCh);}if(!check(ch)){return false;}check=code.isIdentifierPartES6;}return true;}function isIdentifierES5(id,strict){return isIdentifierNameES5(id)&&!isReservedWordES5(id,strict);}function isIdentifierES6(id,strict){return isIdentifierNameES6(id)&&!isReservedWordES6(id,strict);}module.exports={isKeywordES5:isKeywordES5,isKeywordES6:isKeywordES6,isReservedWordES5:isReservedWordES5,isReservedWordES6:isReservedWordES6,isRestrictedWord:isRestrictedWord,isIdentifierNameES5:isIdentifierNameES5,isIdentifierNameES6:isIdentifierNameES6,isIdentifierES5:isIdentifierES5,isIdentifierES6:isIdentifierES6};})();/* vim: set sw=4 ts=4 et tw=80 : */},{\"./code\":363}],365:[function(require,module,exports){/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';exports.ast=require(\"./ast\");exports.code=require(\"./code\");exports.keyword=require(\"./keyword\");})();/* vim: set sw=4 ts=4 et tw=80 : */},{\"./ast\":362,\"./code\":363,\"./keyword\":364}],366:[function(require,module,exports){'use strict';var d=require(\"d\"),callable=require(\"es5-ext/object/valid-callable\"),apply=Function.prototype.apply,call=Function.prototype.call,create=_create4.default,defineProperty=_defineProperty3.default,defineProperties=_defineProperties2.default,hasOwnProperty=Object.prototype.hasOwnProperty,descriptor={configurable:true,enumerable:false,writable:true},on,_once2,off,emit,methods,descriptors,base;on=function on(type,listener){var data;callable(listener);if(!hasOwnProperty.call(this,'__ee__')){data=descriptor.value=create(null);defineProperty(this,'__ee__',descriptor);descriptor.value=null;}else{data=this.__ee__;}if(!data[type])data[type]=listener;else if((0,_typeof6.default)(data[type])==='object')data[type].push(listener);else data[type]=[data[type],listener];return this;};_once2=function once(type,listener){var _once,self;callable(listener);self=this;on.call(this,type,_once=function once(){off.call(self,type,_once);apply.call(listener,this,arguments);});_once.__eeOnceListener__=listener;return this;};off=function off(type,listener){var data,listeners,candidate,i;callable(listener);if(!hasOwnProperty.call(this,'__ee__'))return this;data=this.__ee__;if(!data[type])return this;listeners=data[type];if((typeof listeners===\"undefined\"?\"undefined\":(0,_typeof6.default)(listeners))==='object'){for(i=0;candidate=listeners[i];++i){if(candidate===listener||candidate.__eeOnceListener__===listener){if(listeners.length===2)data[type]=listeners[i?0:1];else listeners.splice(i,1);}}}else{if(listeners===listener||listeners.__eeOnceListener__===listener){delete data[type];}}return this;};emit=function emit(type){var i,l,listener,listeners,args;if(!hasOwnProperty.call(this,'__ee__'))return;listeners=this.__ee__[type];if(!listeners)return;if((typeof listeners===\"undefined\"?\"undefined\":(0,_typeof6.default)(listeners))==='object'){l=arguments.length;args=new Array(l-1);for(i=1;i<l;++i){args[i-1]=arguments[i];}listeners=listeners.slice();for(i=0;listener=listeners[i];++i){apply.call(listener,this,args);}}else{switch(arguments.length){case 1:call.call(listeners,this);break;case 2:call.call(listeners,this,arguments[1]);break;case 3:call.call(listeners,this,arguments[1],arguments[2]);break;default:l=arguments.length;args=new Array(l-1);for(i=1;i<l;++i){args[i-1]=arguments[i];}apply.call(listeners,this,args);}}};methods={on:on,once:_once2,off:off,emit:emit};descriptors={on:d(on),once:d(_once2),off:d(off),emit:d(emit)};base=defineProperties({},descriptors);module.exports=exports=function exports(o){return o==null?create(base):defineProperties(Object(o),descriptors);};exports.methods=methods;},{\"d\":178,\"es5-ext/object/valid-callable\":224}],367:[function(require,module,exports){// 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.\nfunction EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined;}module.exports=EventEmitter;// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;// 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;// 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){if(!isNumber(n)||n<0||isNaN(n))throw TypeError('n must be a positive number');this._maxListeners=n;return this;};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};// If there is no 'error' event listener then throw.\nif(type==='error'){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er;// Unhandled 'error' event\n}else{// At least give some kind of context to the user\nvar err=new Error('Uncaught, unspecified \"error\" event. ('+er+')');err.context=er;throw err;}}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){// fast cases\ncase 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;// slower\ndefault:args=Array.prototype.slice.call(arguments,1);handler.apply(this,args);}}else if(isObject(handler)){args=Array.prototype.slice.call(arguments,1);listeners=handler.slice();len=listeners.length;for(i=0;i<len;i++){listeners[i].apply(this,args);}}return true;};EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError('listener must be a function');if(!this._events)this._events={};// To avoid recursion in the case that type === \"newListener\"! Before\n// adding it to the listeners, first emit \"newListener\".\nif(this._events.newListener)this.emit('newListener',type,isFunction(listener.listener)?listener.listener:listener);if(!this._events[type])// Optimize the case of one listener. Don't need the extra array object.\nthis._events[type]=listener;else if(isObject(this._events[type]))// If we've already got an array, just append.\nthis._events[type].push(listener);else// Adding the second element, need to change to array.\nthis._events[type]=[this._events[type],listener];// Check for listener leak\nif(isObject(this._events[type])&&!this._events[type].warned){if(!isUndefined(this._maxListeners)){m=this._maxListeners;}else{m=EventEmitter.defaultMaxListeners;}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error('(node) warning: possible EventEmitter memory '+'leak detected. %d listeners added. '+'Use emitter.setMaxListeners() to increase limit.',this._events[type].length);if(typeof console.trace==='function'){// not supported in IE 10\nconsole.trace();}}}return this;};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError('listener must be a function');var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments);}}g.listener=listener;this.on(type,g);return this;};// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError('listener must be a function');if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit('removeListener',type,listener);}else if(isObject(list)){for(i=length;i-->0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break;}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type];}else{list.splice(position,1);}if(this._events.removeListener)this.emit('removeListener',type,listener);}return this;};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;// not listening for removeListener, no need to emit\nif(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){for(key in this._events){if(key==='removeListener')continue;this.removeAllListeners(key);}this.removeAllListeners('removeListener');this._events={};return this;}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners);}else if(listeners){// LIFO order\nwhile(listeners.length){this.removeListener(type,listeners[listeners.length-1]);}}delete this._events[type];return this;};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret;};EventEmitter.prototype.listenerCount=function(type){if(this._events){var evlistener=this._events[type];if(isFunction(evlistener))return 1;else if(evlistener)return evlistener.length;}return 0;};EventEmitter.listenerCount=function(emitter,type){return emitter.listenerCount(type);};function isFunction(arg){return typeof arg==='function';}function isNumber(arg){return typeof arg==='number';}function isObject(arg){return(typeof arg===\"undefined\"?\"undefined\":(0,_typeof6.default)(arg))==='object'&&arg!==null;}function isUndefined(arg){return arg===void 0;}},{}],368:[function(require,module,exports){var hasOwn=Object.prototype.hasOwnProperty;var toString=Object.prototype.toString;module.exports=function forEach(obj,fn,ctx){if(toString.call(fn)!=='[object Function]'){throw new TypeError('iterator must be a function');}var l=obj.length;if(l===+l){for(var i=0;i<l;i++){fn.call(ctx,obj[i],i,obj);}}else{for(var k in obj){if(hasOwn.call(obj,k)){fn.call(ctx,obj[k],k,obj);}}}};},{}],369:[function(require,module,exports){var ERROR_MESSAGE='Function.prototype.bind called on incompatible ';var slice=Array.prototype.slice;var toStr=Object.prototype.toString;var funcType='[object Function]';module.exports=function bind(that){var target=this;if(typeof target!=='function'||toStr.call(target)!==funcType){throw new TypeError(ERROR_MESSAGE+target);}var args=slice.call(arguments,1);var bound;var binder=function binder(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));if(Object(result)===result){return result;}return this;}else{return target.apply(that,args.concat(slice.call(arguments)));}};var boundLength=Math.max(0,target.length-args.length);var boundArgs=[];for(var i=0;i<boundLength;i++){boundArgs.push('$'+i);}bound=Function('binder','return function ('+boundArgs.join(',')+'){ return binder.apply(this,arguments); }')(binder);if(target.prototype){var Empty=function Empty(){};Empty.prototype=target.prototype;bound.prototype=new Empty();Empty.prototype=null;}return bound;};},{}],370:[function(require,module,exports){var implementation=require(\"./implementation\");module.exports=Function.prototype.bind||implementation;},{\"./implementation\":369}],371:[function(require,module,exports){var util=require(\"util\");var INDENT_START=/[\\{\\[]/;var INDENT_END=/[\\}\\]]/;module.exports=function(){var lines=[];var indent=0;var push=function push(str){var spaces='';while(spaces.length<indent*2){spaces+='  ';}lines.push(spaces+str);};var line=function line(fmt){if(!fmt)return line;if(INDENT_END.test(fmt.trim()[0])&&INDENT_START.test(fmt[fmt.length-1])){indent--;push(util.format.apply(util,arguments));indent++;return line;}if(INDENT_START.test(fmt[fmt.length-1])){push(util.format.apply(util,arguments));indent++;return line;}if(INDENT_END.test(fmt.trim()[0])){indent--;push(util.format.apply(util,arguments));return line;}push(util.format.apply(util,arguments));return line;};line.toString=function(){return lines.join('\\n');};line.toFunction=function(scope){var src='return ('+line.toString()+')';var keys=(0,_keys4.default)(scope||{}).map(function(key){return key;});var vals=keys.map(function(key){return scope[key];});return Function.apply(null,keys.concat(src)).apply(null,vals);};if(arguments.length)line.apply(null,arguments);return line;};},{\"util\":602}],372:[function(require,module,exports){var isProperty=require(\"is-property\");var gen=function gen(obj,prop){return isProperty(prop)?obj+'.'+prop:obj+'['+(0,_stringify4.default)(prop)+']';};gen.valid=isProperty;gen.property=function(prop){return isProperty(prop)?prop:(0,_stringify4.default)(prop);};module.exports=gen;},{\"is-property\":383}],373:[function(require,module,exports){module.exports={\"builtin\":{\"Array\":false,\"ArrayBuffer\":false,\"Boolean\":false,\"constructor\":false,\"DataView\":false,\"Date\":false,\"decodeURI\":false,\"decodeURIComponent\":false,\"encodeURI\":false,\"encodeURIComponent\":false,\"Error\":false,\"escape\":false,\"eval\":false,\"EvalError\":false,\"Float32Array\":false,\"Float64Array\":false,\"Function\":false,\"hasOwnProperty\":false,\"Infinity\":false,\"Int16Array\":false,\"Int32Array\":false,\"Int8Array\":false,\"isFinite\":false,\"isNaN\":false,\"isPrototypeOf\":false,\"JSON\":false,\"Map\":false,\"Math\":false,\"NaN\":false,\"Number\":false,\"Object\":false,\"parseFloat\":false,\"parseInt\":false,\"Promise\":false,\"propertyIsEnumerable\":false,\"Proxy\":false,\"RangeError\":false,\"ReferenceError\":false,\"Reflect\":false,\"RegExp\":false,\"Set\":false,\"String\":false,\"Symbol\":false,\"SyntaxError\":false,\"System\":false,\"toLocaleString\":false,\"toString\":false,\"TypeError\":false,\"Uint16Array\":false,\"Uint32Array\":false,\"Uint8Array\":false,\"Uint8ClampedArray\":false,\"undefined\":false,\"unescape\":false,\"URIError\":false,\"valueOf\":false,\"WeakMap\":false,\"WeakSet\":false},\"es5\":{\"Array\":false,\"Boolean\":false,\"constructor\":false,\"Date\":false,\"decodeURI\":false,\"decodeURIComponent\":false,\"encodeURI\":false,\"encodeURIComponent\":false,\"Error\":false,\"escape\":false,\"eval\":false,\"EvalError\":false,\"Function\":false,\"hasOwnProperty\":false,\"Infinity\":false,\"isFinite\":false,\"isNaN\":false,\"isPrototypeOf\":false,\"JSON\":false,\"Math\":false,\"NaN\":false,\"Number\":false,\"Object\":false,\"parseFloat\":false,\"parseInt\":false,\"propertyIsEnumerable\":false,\"RangeError\":false,\"ReferenceError\":false,\"RegExp\":false,\"String\":false,\"SyntaxError\":false,\"toLocaleString\":false,\"toString\":false,\"TypeError\":false,\"undefined\":false,\"unescape\":false,\"URIError\":false,\"valueOf\":false},\"es6\":{\"Array\":false,\"ArrayBuffer\":false,\"Boolean\":false,\"constructor\":false,\"DataView\":false,\"Date\":false,\"decodeURI\":false,\"decodeURIComponent\":false,\"encodeURI\":false,\"encodeURIComponent\":false,\"Error\":false,\"escape\":false,\"eval\":false,\"EvalError\":false,\"Float32Array\":false,\"Float64Array\":false,\"Function\":false,\"hasOwnProperty\":false,\"Infinity\":false,\"Int16Array\":false,\"Int32Array\":false,\"Int8Array\":false,\"isFinite\":false,\"isNaN\":false,\"isPrototypeOf\":false,\"JSON\":false,\"Map\":false,\"Math\":false,\"NaN\":false,\"Number\":false,\"Object\":false,\"parseFloat\":false,\"parseInt\":false,\"Promise\":false,\"propertyIsEnumerable\":false,\"Proxy\":false,\"RangeError\":false,\"ReferenceError\":false,\"Reflect\":false,\"RegExp\":false,\"Set\":false,\"String\":false,\"Symbol\":false,\"SyntaxError\":false,\"System\":false,\"toLocaleString\":false,\"toString\":false,\"TypeError\":false,\"Uint16Array\":false,\"Uint32Array\":false,\"Uint8Array\":false,\"Uint8ClampedArray\":false,\"undefined\":false,\"unescape\":false,\"URIError\":false,\"valueOf\":false,\"WeakMap\":false,\"WeakSet\":false},\"browser\":{\"addEventListener\":false,\"alert\":false,\"AnalyserNode\":false,\"Animation\":false,\"AnimationEffectReadOnly\":false,\"AnimationEffectTiming\":false,\"AnimationEffectTimingReadOnly\":false,\"AnimationEvent\":false,\"AnimationPlaybackEvent\":false,\"AnimationTimeline\":false,\"applicationCache\":false,\"ApplicationCache\":false,\"ApplicationCacheErrorEvent\":false,\"atob\":false,\"Attr\":false,\"Audio\":false,\"AudioBuffer\":false,\"AudioBufferSourceNode\":false,\"AudioContext\":false,\"AudioDestinationNode\":false,\"AudioListener\":false,\"AudioNode\":false,\"AudioParam\":false,\"AudioProcessingEvent\":false,\"AutocompleteErrorEvent\":false,\"BarProp\":false,\"BatteryManager\":false,\"BeforeUnloadEvent\":false,\"BiquadFilterNode\":false,\"Blob\":false,\"blur\":false,\"btoa\":false,\"Cache\":false,\"caches\":false,\"CacheStorage\":false,\"cancelAnimationFrame\":false,\"CanvasGradient\":false,\"CanvasPattern\":false,\"CanvasRenderingContext2D\":false,\"CDATASection\":false,\"ChannelMergerNode\":false,\"ChannelSplitterNode\":false,\"CharacterData\":false,\"clearInterval\":false,\"clearTimeout\":false,\"clientInformation\":false,\"ClientRect\":false,\"ClientRectList\":false,\"ClipboardEvent\":false,\"close\":false,\"closed\":false,\"CloseEvent\":false,\"Comment\":false,\"CompositionEvent\":false,\"confirm\":false,\"console\":false,\"ConvolverNode\":false,\"Credential\":false,\"CredentialsContainer\":false,\"crypto\":false,\"Crypto\":false,\"CryptoKey\":false,\"CSS\":false,\"CSSAnimation\":false,\"CSSFontFaceRule\":false,\"CSSImportRule\":false,\"CSSKeyframeRule\":false,\"CSSKeyframesRule\":false,\"CSSMediaRule\":false,\"CSSPageRule\":false,\"CSSRule\":false,\"CSSRuleList\":false,\"CSSStyleDeclaration\":false,\"CSSStyleRule\":false,\"CSSStyleSheet\":false,\"CSSSupportsRule\":false,\"CSSTransition\":false,\"CSSUnknownRule\":false,\"CSSViewportRule\":false,\"customElements\":false,\"CustomEvent\":false,\"DataTransfer\":false,\"DataTransferItem\":false,\"DataTransferItemList\":false,\"Debug\":false,\"defaultStatus\":false,\"defaultstatus\":false,\"DelayNode\":false,\"DeviceMotionEvent\":false,\"DeviceOrientationEvent\":false,\"devicePixelRatio\":false,\"dispatchEvent\":false,\"document\":false,\"Document\":false,\"DocumentFragment\":false,\"DocumentTimeline\":false,\"DocumentType\":false,\"DOMError\":false,\"DOMException\":false,\"DOMImplementation\":false,\"DOMParser\":false,\"DOMSettableTokenList\":false,\"DOMStringList\":false,\"DOMStringMap\":false,\"DOMTokenList\":false,\"DragEvent\":false,\"DynamicsCompressorNode\":false,\"Element\":false,\"ElementTimeControl\":false,\"ErrorEvent\":false,\"event\":false,\"Event\":false,\"EventSource\":false,\"EventTarget\":false,\"external\":false,\"FederatedCredential\":false,\"fetch\":false,\"File\":false,\"FileError\":false,\"FileList\":false,\"FileReader\":false,\"find\":false,\"focus\":false,\"FocusEvent\":false,\"FontFace\":false,\"FormData\":false,\"frameElement\":false,\"frames\":false,\"GainNode\":false,\"Gamepad\":false,\"GamepadButton\":false,\"GamepadEvent\":false,\"getComputedStyle\":false,\"getSelection\":false,\"HashChangeEvent\":false,\"Headers\":false,\"history\":false,\"History\":false,\"HTMLAllCollection\":false,\"HTMLAnchorElement\":false,\"HTMLAppletElement\":false,\"HTMLAreaElement\":false,\"HTMLAudioElement\":false,\"HTMLBaseElement\":false,\"HTMLBlockquoteElement\":false,\"HTMLBodyElement\":false,\"HTMLBRElement\":false,\"HTMLButtonElement\":false,\"HTMLCanvasElement\":false,\"HTMLCollection\":false,\"HTMLContentElement\":false,\"HTMLDataListElement\":false,\"HTMLDetailsElement\":false,\"HTMLDialogElement\":false,\"HTMLDirectoryElement\":false,\"HTMLDivElement\":false,\"HTMLDListElement\":false,\"HTMLDocument\":false,\"HTMLElement\":false,\"HTMLEmbedElement\":false,\"HTMLFieldSetElement\":false,\"HTMLFontElement\":false,\"HTMLFormControlsCollection\":false,\"HTMLFormElement\":false,\"HTMLFrameElement\":false,\"HTMLFrameSetElement\":false,\"HTMLHeadElement\":false,\"HTMLHeadingElement\":false,\"HTMLHRElement\":false,\"HTMLHtmlElement\":false,\"HTMLIFrameElement\":false,\"HTMLImageElement\":false,\"HTMLInputElement\":false,\"HTMLIsIndexElement\":false,\"HTMLKeygenElement\":false,\"HTMLLabelElement\":false,\"HTMLLayerElement\":false,\"HTMLLegendElement\":false,\"HTMLLIElement\":false,\"HTMLLinkElement\":false,\"HTMLMapElement\":false,\"HTMLMarqueeElement\":false,\"HTMLMediaElement\":false,\"HTMLMenuElement\":false,\"HTMLMetaElement\":false,\"HTMLMeterElement\":false,\"HTMLModElement\":false,\"HTMLObjectElement\":false,\"HTMLOListElement\":false,\"HTMLOptGroupElement\":false,\"HTMLOptionElement\":false,\"HTMLOptionsCollection\":false,\"HTMLOutputElement\":false,\"HTMLParagraphElement\":false,\"HTMLParamElement\":false,\"HTMLPictureElement\":false,\"HTMLPreElement\":false,\"HTMLProgressElement\":false,\"HTMLQuoteElement\":false,\"HTMLScriptElement\":false,\"HTMLSelectElement\":false,\"HTMLShadowElement\":false,\"HTMLSourceElement\":false,\"HTMLSpanElement\":false,\"HTMLStyleElement\":false,\"HTMLTableCaptionElement\":false,\"HTMLTableCellElement\":false,\"HTMLTableColElement\":false,\"HTMLTableElement\":false,\"HTMLTableRowElement\":false,\"HTMLTableSectionElement\":false,\"HTMLTemplateElement\":false,\"HTMLTextAreaElement\":false,\"HTMLTitleElement\":false,\"HTMLTrackElement\":false,\"HTMLUListElement\":false,\"HTMLUnknownElement\":false,\"HTMLVideoElement\":false,\"IDBCursor\":false,\"IDBCursorWithValue\":false,\"IDBDatabase\":false,\"IDBEnvironment\":false,\"IDBFactory\":false,\"IDBIndex\":false,\"IDBKeyRange\":false,\"IDBObjectStore\":false,\"IDBOpenDBRequest\":false,\"IDBRequest\":false,\"IDBTransaction\":false,\"IDBVersionChangeEvent\":false,\"Image\":false,\"ImageBitmap\":false,\"ImageData\":false,\"indexedDB\":false,\"innerHeight\":false,\"innerWidth\":false,\"InputEvent\":false,\"InputMethodContext\":false,\"IntersectionObserver\":false,\"IntersectionObserverEntry\":false,\"Intl\":false,\"KeyboardEvent\":false,\"KeyframeEffect\":false,\"KeyframeEffectReadOnly\":false,\"length\":false,\"localStorage\":false,\"location\":false,\"Location\":false,\"locationbar\":false,\"matchMedia\":false,\"MediaElementAudioSourceNode\":false,\"MediaEncryptedEvent\":false,\"MediaError\":false,\"MediaKeyError\":false,\"MediaKeyEvent\":false,\"MediaKeyMessageEvent\":false,\"MediaKeys\":false,\"MediaKeySession\":false,\"MediaKeyStatusMap\":false,\"MediaKeySystemAccess\":false,\"MediaList\":false,\"MediaQueryList\":false,\"MediaQueryListEvent\":false,\"MediaSource\":false,\"MediaRecorder\":false,\"MediaStream\":false,\"MediaStreamAudioDestinationNode\":false,\"MediaStreamAudioSourceNode\":false,\"MediaStreamEvent\":false,\"MediaStreamTrack\":false,\"menubar\":false,\"MessageChannel\":false,\"MessageEvent\":false,\"MessagePort\":false,\"MIDIAccess\":false,\"MIDIConnectionEvent\":false,\"MIDIInput\":false,\"MIDIInputMap\":false,\"MIDIMessageEvent\":false,\"MIDIOutput\":false,\"MIDIOutputMap\":false,\"MIDIPort\":false,\"MimeType\":false,\"MimeTypeArray\":false,\"MouseEvent\":false,\"moveBy\":false,\"moveTo\":false,\"MutationEvent\":false,\"MutationObserver\":false,\"MutationRecord\":false,\"name\":false,\"NamedNodeMap\":false,\"navigator\":false,\"Navigator\":false,\"Node\":false,\"NodeFilter\":false,\"NodeIterator\":false,\"NodeList\":false,\"Notification\":false,\"OfflineAudioCompletionEvent\":false,\"OfflineAudioContext\":false,\"offscreenBuffering\":false,\"onbeforeunload\":true,\"onblur\":true,\"onerror\":true,\"onfocus\":true,\"onload\":true,\"onresize\":true,\"onunload\":true,\"open\":false,\"openDatabase\":false,\"opener\":false,\"opera\":false,\"Option\":false,\"OscillatorNode\":false,\"outerHeight\":false,\"outerWidth\":false,\"PageTransitionEvent\":false,\"pageXOffset\":false,\"pageYOffset\":false,\"parent\":false,\"PasswordCredential\":false,\"Path2D\":false,\"performance\":false,\"Performance\":false,\"PerformanceEntry\":false,\"PerformanceMark\":false,\"PerformanceMeasure\":false,\"PerformanceNavigation\":false,\"PerformanceResourceTiming\":false,\"PerformanceTiming\":false,\"PeriodicWave\":false,\"Permissions\":false,\"PermissionStatus\":false,\"personalbar\":false,\"Plugin\":false,\"PluginArray\":false,\"PopStateEvent\":false,\"postMessage\":false,\"print\":false,\"ProcessingInstruction\":false,\"ProgressEvent\":false,\"PromiseRejectionEvent\":false,\"prompt\":false,\"PushManager\":false,\"PushSubscription\":false,\"RadioNodeList\":false,\"Range\":false,\"ReadableByteStream\":false,\"ReadableStream\":false,\"removeEventListener\":false,\"Request\":false,\"requestAnimationFrame\":false,\"requestIdleCallback\":false,\"resizeBy\":false,\"resizeTo\":false,\"Response\":false,\"RTCIceCandidate\":false,\"RTCSessionDescription\":false,\"RTCPeerConnection\":false,\"screen\":false,\"Screen\":false,\"screenLeft\":false,\"ScreenOrientation\":false,\"screenTop\":false,\"screenX\":false,\"screenY\":false,\"ScriptProcessorNode\":false,\"scroll\":false,\"scrollbars\":false,\"scrollBy\":false,\"scrollTo\":false,\"scrollX\":false,\"scrollY\":false,\"SecurityPolicyViolationEvent\":false,\"Selection\":false,\"self\":false,\"ServiceWorker\":false,\"ServiceWorkerContainer\":false,\"ServiceWorkerRegistration\":false,\"sessionStorage\":false,\"setInterval\":false,\"setTimeout\":false,\"ShadowRoot\":false,\"SharedKeyframeList\":false,\"SharedWorker\":false,\"showModalDialog\":false,\"SiteBoundCredential\":false,\"speechSynthesis\":false,\"SpeechSynthesisEvent\":false,\"SpeechSynthesisUtterance\":false,\"status\":false,\"statusbar\":false,\"stop\":false,\"Storage\":false,\"StorageEvent\":false,\"styleMedia\":false,\"StyleSheet\":false,\"StyleSheetList\":false,\"SubtleCrypto\":false,\"SVGAElement\":false,\"SVGAltGlyphDefElement\":false,\"SVGAltGlyphElement\":false,\"SVGAltGlyphItemElement\":false,\"SVGAngle\":false,\"SVGAnimateColorElement\":false,\"SVGAnimatedAngle\":false,\"SVGAnimatedBoolean\":false,\"SVGAnimatedEnumeration\":false,\"SVGAnimatedInteger\":false,\"SVGAnimatedLength\":false,\"SVGAnimatedLengthList\":false,\"SVGAnimatedNumber\":false,\"SVGAnimatedNumberList\":false,\"SVGAnimatedPathData\":false,\"SVGAnimatedPoints\":false,\"SVGAnimatedPreserveAspectRatio\":false,\"SVGAnimatedRect\":false,\"SVGAnimatedString\":false,\"SVGAnimatedTransformList\":false,\"SVGAnimateElement\":false,\"SVGAnimateMotionElement\":false,\"SVGAnimateTransformElement\":false,\"SVGAnimationElement\":false,\"SVGCircleElement\":false,\"SVGClipPathElement\":false,\"SVGColor\":false,\"SVGColorProfileElement\":false,\"SVGColorProfileRule\":false,\"SVGComponentTransferFunctionElement\":false,\"SVGCSSRule\":false,\"SVGCursorElement\":false,\"SVGDefsElement\":false,\"SVGDescElement\":false,\"SVGDiscardElement\":false,\"SVGDocument\":false,\"SVGElement\":false,\"SVGElementInstance\":false,\"SVGElementInstanceList\":false,\"SVGEllipseElement\":false,\"SVGEvent\":false,\"SVGExternalResourcesRequired\":false,\"SVGFEBlendElement\":false,\"SVGFEColorMatrixElement\":false,\"SVGFEComponentTransferElement\":false,\"SVGFECompositeElement\":false,\"SVGFEConvolveMatrixElement\":false,\"SVGFEDiffuseLightingElement\":false,\"SVGFEDisplacementMapElement\":false,\"SVGFEDistantLightElement\":false,\"SVGFEDropShadowElement\":false,\"SVGFEFloodElement\":false,\"SVGFEFuncAElement\":false,\"SVGFEFuncBElement\":false,\"SVGFEFuncGElement\":false,\"SVGFEFuncRElement\":false,\"SVGFEGaussianBlurElement\":false,\"SVGFEImageElement\":false,\"SVGFEMergeElement\":false,\"SVGFEMergeNodeElement\":false,\"SVGFEMorphologyElement\":false,\"SVGFEOffsetElement\":false,\"SVGFEPointLightElement\":false,\"SVGFESpecularLightingElement\":false,\"SVGFESpotLightElement\":false,\"SVGFETileElement\":false,\"SVGFETurbulenceElement\":false,\"SVGFilterElement\":false,\"SVGFilterPrimitiveStandardAttributes\":false,\"SVGFitToViewBox\":false,\"SVGFontElement\":false,\"SVGFontFaceElement\":false,\"SVGFontFaceFormatElement\":false,\"SVGFontFaceNameElement\":false,\"SVGFontFaceSrcElement\":false,\"SVGFontFaceUriElement\":false,\"SVGForeignObjectElement\":false,\"SVGGElement\":false,\"SVGGeometryElement\":false,\"SVGGlyphElement\":false,\"SVGGlyphRefElement\":false,\"SVGGradientElement\":false,\"SVGGraphicsElement\":false,\"SVGHKernElement\":false,\"SVGICCColor\":false,\"SVGImageElement\":false,\"SVGLangSpace\":false,\"SVGLength\":false,\"SVGLengthList\":false,\"SVGLinearGradientElement\":false,\"SVGLineElement\":false,\"SVGLocatable\":false,\"SVGMarkerElement\":false,\"SVGMaskElement\":false,\"SVGMatrix\":false,\"SVGMetadataElement\":false,\"SVGMissingGlyphElement\":false,\"SVGMPathElement\":false,\"SVGNumber\":false,\"SVGNumberList\":false,\"SVGPaint\":false,\"SVGPathElement\":false,\"SVGPathSeg\":false,\"SVGPathSegArcAbs\":false,\"SVGPathSegArcRel\":false,\"SVGPathSegClosePath\":false,\"SVGPathSegCurvetoCubicAbs\":false,\"SVGPathSegCurvetoCubicRel\":false,\"SVGPathSegCurvetoCubicSmoothAbs\":false,\"SVGPathSegCurvetoCubicSmoothRel\":false,\"SVGPathSegCurvetoQuadraticAbs\":false,\"SVGPathSegCurvetoQuadraticRel\":false,\"SVGPathSegCurvetoQuadraticSmoothAbs\":false,\"SVGPathSegCurvetoQuadraticSmoothRel\":false,\"SVGPathSegLinetoAbs\":false,\"SVGPathSegLinetoHorizontalAbs\":false,\"SVGPathSegLinetoHorizontalRel\":false,\"SVGPathSegLinetoRel\":false,\"SVGPathSegLinetoVerticalAbs\":false,\"SVGPathSegLinetoVerticalRel\":false,\"SVGPathSegList\":false,\"SVGPathSegMovetoAbs\":false,\"SVGPathSegMovetoRel\":false,\"SVGPatternElement\":false,\"SVGPoint\":false,\"SVGPointList\":false,\"SVGPolygonElement\":false,\"SVGPolylineElement\":false,\"SVGPreserveAspectRatio\":false,\"SVGRadialGradientElement\":false,\"SVGRect\":false,\"SVGRectElement\":false,\"SVGRenderingIntent\":false,\"SVGScriptElement\":false,\"SVGSetElement\":false,\"SVGStopElement\":false,\"SVGStringList\":false,\"SVGStylable\":false,\"SVGStyleElement\":false,\"SVGSVGElement\":false,\"SVGSwitchElement\":false,\"SVGSymbolElement\":false,\"SVGTests\":false,\"SVGTextContentElement\":false,\"SVGTextElement\":false,\"SVGTextPathElement\":false,\"SVGTextPositioningElement\":false,\"SVGTitleElement\":false,\"SVGTransform\":false,\"SVGTransformable\":false,\"SVGTransformList\":false,\"SVGTRefElement\":false,\"SVGTSpanElement\":false,\"SVGUnitTypes\":false,\"SVGURIReference\":false,\"SVGUseElement\":false,\"SVGViewElement\":false,\"SVGViewSpec\":false,\"SVGVKernElement\":false,\"SVGZoomAndPan\":false,\"SVGZoomEvent\":false,\"Text\":false,\"TextDecoder\":false,\"TextEncoder\":false,\"TextEvent\":false,\"TextMetrics\":false,\"TextTrack\":false,\"TextTrackCue\":false,\"TextTrackCueList\":false,\"TextTrackList\":false,\"TimeEvent\":false,\"TimeRanges\":false,\"toolbar\":false,\"top\":false,\"Touch\":false,\"TouchEvent\":false,\"TouchList\":false,\"TrackEvent\":false,\"TransitionEvent\":false,\"TreeWalker\":false,\"UIEvent\":false,\"URL\":false,\"URLSearchParams\":false,\"ValidityState\":false,\"VTTCue\":false,\"WaveShaperNode\":false,\"WebGLActiveInfo\":false,\"WebGLBuffer\":false,\"WebGLContextEvent\":false,\"WebGLFramebuffer\":false,\"WebGLProgram\":false,\"WebGLRenderbuffer\":false,\"WebGLRenderingContext\":false,\"WebGLShader\":false,\"WebGLShaderPrecisionFormat\":false,\"WebGLTexture\":false,\"WebGLUniformLocation\":false,\"WebSocket\":false,\"WheelEvent\":false,\"window\":false,\"Window\":false,\"Worker\":false,\"XDomainRequest\":false,\"XMLDocument\":false,\"XMLHttpRequest\":false,\"XMLHttpRequestEventTarget\":false,\"XMLHttpRequestProgressEvent\":false,\"XMLHttpRequestUpload\":false,\"XMLSerializer\":false,\"XPathEvaluator\":false,\"XPathException\":false,\"XPathExpression\":false,\"XPathNamespace\":false,\"XPathNSResolver\":false,\"XPathResult\":false,\"XSLTProcessor\":false},\"worker\":{\"applicationCache\":false,\"atob\":false,\"Blob\":false,\"BroadcastChannel\":false,\"btoa\":false,\"Cache\":false,\"caches\":false,\"clearInterval\":false,\"clearTimeout\":false,\"close\":true,\"console\":false,\"fetch\":false,\"FileReaderSync\":false,\"FormData\":false,\"Headers\":false,\"IDBCursor\":false,\"IDBCursorWithValue\":false,\"IDBDatabase\":false,\"IDBFactory\":false,\"IDBIndex\":false,\"IDBKeyRange\":false,\"IDBObjectStore\":false,\"IDBOpenDBRequest\":false,\"IDBRequest\":false,\"IDBTransaction\":false,\"IDBVersionChangeEvent\":false,\"ImageData\":false,\"importScripts\":true,\"indexedDB\":false,\"location\":false,\"MessageChannel\":false,\"MessagePort\":false,\"name\":false,\"navigator\":false,\"Notification\":false,\"onclose\":true,\"onconnect\":true,\"onerror\":true,\"onlanguagechange\":true,\"onmessage\":true,\"onoffline\":true,\"ononline\":true,\"onrejectionhandled\":true,\"onunhandledrejection\":true,\"performance\":false,\"Performance\":false,\"PerformanceEntry\":false,\"PerformanceMark\":false,\"PerformanceMeasure\":false,\"PerformanceNavigation\":false,\"PerformanceResourceTiming\":false,\"PerformanceTiming\":false,\"postMessage\":true,\"Promise\":false,\"Request\":false,\"Response\":false,\"self\":true,\"ServiceWorkerRegistration\":false,\"setInterval\":false,\"setTimeout\":false,\"TextDecoder\":false,\"TextEncoder\":false,\"URL\":false,\"URLSearchParams\":false,\"WebSocket\":false,\"Worker\":false,\"XMLHttpRequest\":false},\"node\":{\"__dirname\":false,\"__filename\":false,\"arguments\":false,\"Buffer\":false,\"clearImmediate\":false,\"clearInterval\":false,\"clearTimeout\":false,\"console\":false,\"exports\":true,\"GLOBAL\":false,\"global\":false,\"Intl\":false,\"module\":false,\"process\":false,\"require\":false,\"root\":false,\"setImmediate\":false,\"setInterval\":false,\"setTimeout\":false},\"commonjs\":{\"exports\":true,\"module\":false,\"require\":false,\"global\":false},\"amd\":{\"define\":false,\"require\":false},\"mocha\":{\"after\":false,\"afterEach\":false,\"before\":false,\"beforeEach\":false,\"context\":false,\"describe\":false,\"it\":false,\"mocha\":false,\"run\":false,\"setup\":false,\"specify\":false,\"suite\":false,\"suiteSetup\":false,\"suiteTeardown\":false,\"teardown\":false,\"test\":false,\"xcontext\":false,\"xdescribe\":false,\"xit\":false,\"xspecify\":false},\"jasmine\":{\"afterAll\":false,\"afterEach\":false,\"beforeAll\":false,\"beforeEach\":false,\"describe\":false,\"expect\":false,\"fail\":false,\"fdescribe\":false,\"fit\":false,\"it\":false,\"jasmine\":false,\"pending\":false,\"runs\":false,\"spyOn\":false,\"waits\":false,\"waitsFor\":false,\"xdescribe\":false,\"xit\":false},\"jest\":{\"afterAll\":false,\"afterEach\":false,\"beforeAll\":false,\"beforeEach\":false,\"check\":false,\"describe\":false,\"expect\":false,\"gen\":false,\"it\":false,\"fdescribe\":false,\"fit\":false,\"jest\":false,\"pit\":false,\"require\":false,\"test\":false,\"xdescribe\":false,\"xit\":false,\"xtest\":false},\"qunit\":{\"asyncTest\":false,\"deepEqual\":false,\"equal\":false,\"expect\":false,\"module\":false,\"notDeepEqual\":false,\"notEqual\":false,\"notOk\":false,\"notPropEqual\":false,\"notStrictEqual\":false,\"ok\":false,\"propEqual\":false,\"QUnit\":false,\"raises\":false,\"start\":false,\"stop\":false,\"strictEqual\":false,\"test\":false,\"throws\":false},\"phantomjs\":{\"console\":true,\"exports\":true,\"phantom\":true,\"require\":true,\"WebPage\":true},\"couch\":{\"emit\":false,\"exports\":false,\"getRow\":false,\"log\":false,\"module\":false,\"provides\":false,\"require\":false,\"respond\":false,\"send\":false,\"start\":false,\"sum\":false},\"rhino\":{\"defineClass\":false,\"deserialize\":false,\"gc\":false,\"help\":false,\"importClass\":false,\"importPackage\":false,\"java\":false,\"load\":false,\"loadClass\":false,\"Packages\":false,\"print\":false,\"quit\":false,\"readFile\":false,\"readUrl\":false,\"runCommand\":false,\"seal\":false,\"serialize\":false,\"spawn\":false,\"sync\":false,\"toint32\":false,\"version\":false},\"nashorn\":{\"__DIR__\":false,\"__FILE__\":false,\"__LINE__\":false,\"com\":false,\"edu\":false,\"exit\":false,\"Java\":false,\"java\":false,\"javafx\":false,\"JavaImporter\":false,\"javax\":false,\"JSAdapter\":false,\"load\":false,\"loadWithNewGlobal\":false,\"org\":false,\"Packages\":false,\"print\":false,\"quit\":false},\"wsh\":{\"ActiveXObject\":true,\"Enumerator\":true,\"GetObject\":true,\"ScriptEngine\":true,\"ScriptEngineBuildVersion\":true,\"ScriptEngineMajorVersion\":true,\"ScriptEngineMinorVersion\":true,\"VBArray\":true,\"WScript\":true,\"WSH\":true,\"XDomainRequest\":true},\"jquery\":{\"$\":false,\"jQuery\":false},\"yui\":{\"Y\":false,\"YUI\":false,\"YUI_config\":false},\"shelljs\":{\"cat\":false,\"cd\":false,\"chmod\":false,\"config\":false,\"cp\":false,\"dirs\":false,\"echo\":false,\"env\":false,\"error\":false,\"exec\":false,\"exit\":false,\"find\":false,\"grep\":false,\"ls\":false,\"ln\":false,\"mkdir\":false,\"mv\":false,\"popd\":false,\"pushd\":false,\"pwd\":false,\"rm\":false,\"sed\":false,\"set\":false,\"target\":false,\"tempdir\":false,\"test\":false,\"touch\":false,\"which\":false},\"prototypejs\":{\"$\":false,\"$$\":false,\"$A\":false,\"$break\":false,\"$continue\":false,\"$F\":false,\"$H\":false,\"$R\":false,\"$w\":false,\"Abstract\":false,\"Ajax\":false,\"Autocompleter\":false,\"Builder\":false,\"Class\":false,\"Control\":false,\"Draggable\":false,\"Draggables\":false,\"Droppables\":false,\"Effect\":false,\"Element\":false,\"Enumerable\":false,\"Event\":false,\"Field\":false,\"Form\":false,\"Hash\":false,\"Insertion\":false,\"ObjectRange\":false,\"PeriodicalExecuter\":false,\"Position\":false,\"Prototype\":false,\"Scriptaculous\":false,\"Selector\":false,\"Sortable\":false,\"SortableObserver\":false,\"Sound\":false,\"Template\":false,\"Toggle\":false,\"Try\":false},\"meteor\":{\"$\":false,\"_\":false,\"Accounts\":false,\"AccountsClient\":false,\"AccountsServer\":false,\"AccountsCommon\":false,\"App\":false,\"Assets\":false,\"Blaze\":false,\"check\":false,\"Cordova\":false,\"DDP\":false,\"DDPServer\":false,\"DDPRateLimiter\":false,\"Deps\":false,\"EJSON\":false,\"Email\":false,\"HTTP\":false,\"Log\":false,\"Match\":false,\"Meteor\":false,\"Mongo\":false,\"MongoInternals\":false,\"Npm\":false,\"Package\":false,\"Plugin\":false,\"process\":false,\"Random\":false,\"ReactiveDict\":false,\"ReactiveVar\":false,\"Router\":false,\"ServiceConfiguration\":false,\"Session\":false,\"share\":false,\"Spacebars\":false,\"Template\":false,\"Tinytest\":false,\"Tracker\":false,\"UI\":false,\"Utils\":false,\"WebApp\":false,\"WebAppInternals\":false},\"mongo\":{\"_isWindows\":false,\"_rand\":false,\"BulkWriteResult\":false,\"cat\":false,\"cd\":false,\"connect\":false,\"db\":false,\"getHostName\":false,\"getMemInfo\":false,\"hostname\":false,\"ISODate\":false,\"listFiles\":false,\"load\":false,\"ls\":false,\"md5sumFile\":false,\"mkdir\":false,\"Mongo\":false,\"NumberInt\":false,\"NumberLong\":false,\"ObjectId\":false,\"PlanCache\":false,\"print\":false,\"printjson\":false,\"pwd\":false,\"quit\":false,\"removeFile\":false,\"rs\":false,\"sh\":false,\"UUID\":false,\"version\":false,\"WriteResult\":false},\"applescript\":{\"$\":false,\"Application\":false,\"Automation\":false,\"console\":false,\"delay\":false,\"Library\":false,\"ObjC\":false,\"ObjectSpecifier\":false,\"Path\":false,\"Progress\":false,\"Ref\":false},\"serviceworker\":{\"caches\":false,\"Cache\":false,\"CacheStorage\":false,\"Client\":false,\"clients\":false,\"Clients\":false,\"ExtendableEvent\":false,\"ExtendableMessageEvent\":false,\"FetchEvent\":false,\"importScripts\":false,\"registration\":false,\"self\":false,\"ServiceWorker\":false,\"ServiceWorkerContainer\":false,\"ServiceWorkerGlobalScope\":false,\"ServiceWorkerMessageEvent\":false,\"ServiceWorkerRegistration\":false,\"skipWaiting\":false,\"WindowClient\":false},\"atomtest\":{\"advanceClock\":false,\"fakeClearInterval\":false,\"fakeClearTimeout\":false,\"fakeSetInterval\":false,\"fakeSetTimeout\":false,\"resetTimeouts\":false,\"waitsForPromise\":false},\"embertest\":{\"andThen\":false,\"click\":false,\"currentPath\":false,\"currentRouteName\":false,\"currentURL\":false,\"fillIn\":false,\"find\":false,\"findWithAssert\":false,\"keyEvent\":false,\"pauseTest\":false,\"triggerEvent\":false,\"visit\":false},\"protractor\":{\"$\":false,\"$$\":false,\"browser\":false,\"By\":false,\"by\":false,\"DartObject\":false,\"element\":false,\"protractor\":false},\"shared-node-browser\":{\"clearInterval\":false,\"clearTimeout\":false,\"console\":false,\"setInterval\":false,\"setTimeout\":false},\"webextensions\":{\"browser\":false,\"chrome\":false,\"opr\":false},\"greasemonkey\":{\"GM_addStyle\":false,\"GM_deleteValue\":false,\"GM_getResourceText\":false,\"GM_getResourceURL\":false,\"GM_getValue\":false,\"GM_info\":false,\"GM_listValues\":false,\"GM_log\":false,\"GM_openInTab\":false,\"GM_registerMenuCommand\":false,\"GM_setClipboard\":false,\"GM_setValue\":false,\"GM_xmlhttpRequest\":false,\"unsafeWindow\":false}};},{}],374:[function(require,module,exports){module.exports=require(\"./globals.json\");},{\"./globals.json\":373}],375:[function(require,module,exports){'use strict';var ansiRegex=require(\"ansi-regex\");var re=new RegExp(ansiRegex().source);// remove the `g` flag\nmodule.exports=re.test.bind(re);},{\"ansi-regex\":5}],376:[function(require,module,exports){var bind=require(\"function-bind\");module.exports=bind.call(Function.call,Object.prototype.hasOwnProperty);},{\"function-bind\":370}],377:[function(require,module,exports){(function(process){'use strict';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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}module.exports=function(){return new IgnoreBase();};// A simple implementation of make-array\nfunction make_array(subject){return Array.isArray(subject)?subject:[subject];}var REGEX_BLANK_LINE=/^\\s+$/;var REGEX_LEADING_EXCAPED_EXCLAMATION=/^\\\\\\!/;var REGEX_LEADING_EXCAPED_HASH=/^\\\\#/;var SLASH='/';var IgnoreBase=function(){function IgnoreBase(){_classCallCheck(this,IgnoreBase);this._rules=[];this._initCache();}_createClass(IgnoreBase,[{key:'_initCache',value:function _initCache(){this._cache={};}// @param {Array.<string>|string|Ignore} pattern\n},{key:'add',value:function add(pattern){this._added=false;if(typeof pattern==='string'){pattern=pattern.split(/\\r?\\n/g);}make_array(pattern).forEach(this._addPattern,this);// Some rules have just added to the ignore,\n// making the behavior changed.\nif(this._added){this._initCache();}return this;}// legacy\n},{key:'addPattern',value:function addPattern(pattern){return this.add(pattern);}},{key:'_addPattern',value:function _addPattern(pattern){if(pattern instanceof IgnoreBase){this._rules=this._rules.concat(pattern._rules);this._added=true;return;}if(this._checkPattern(pattern)){var rule=this._createRule(pattern);this._added=true;this._rules.push(rule);}}},{key:'_checkPattern',value:function _checkPattern(pattern){// > A blank line matches no files, so it can serve as a separator for readability.\nreturn pattern&&typeof pattern==='string'&&!REGEX_BLANK_LINE.test(pattern)// > A line starting with # serves as a comment.\n&&pattern.indexOf('#')!==0;}},{key:'filter',value:function filter(paths){var _this=this;return make_array(paths).filter(function(path){return _this._filter(path);});}},{key:'createFilter',value:function createFilter(){var _this2=this;return function(path){return _this2._filter(path);};}},{key:'ignores',value:function ignores(path){return!this._filter(path);}},{key:'_createRule',value:function _createRule(pattern){var origin=pattern;var negative=false;// > An optional prefix \"!\" which negates the pattern;\nif(pattern.indexOf('!')===0){negative=true;pattern=pattern.substr(1);}pattern=pattern// > Put a backslash (\"\\\") in front of the first \"!\" for patterns that begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n.replace(REGEX_LEADING_EXCAPED_EXCLAMATION,'!')// > Put a backslash (\"\\\") in front of the first hash for patterns that begin with a hash.\n.replace(REGEX_LEADING_EXCAPED_HASH,'#');var regex=make_regex(pattern,negative);return{origin:origin,pattern:pattern,negative:negative,regex:regex};}// @returns `Boolean` true if the `path` is NOT ignored\n},{key:'_filter',value:function _filter(path,slices){if(!path){return false;}if(path in this._cache){return this._cache[path];}if(!slices){// path/to/a.js\n// ['path', 'to', 'a.js']\nslices=path.split(SLASH);// '/b/a.js' -> ['', 'b', 'a.js'] -> ['']\nif(slices.length&&!slices[0]){slices=slices.slice(1);slices[0]=SLASH+slices[0];}}slices.pop();return this._cache[path]=slices.length// > It is not possible to re-include a file if a parent directory of that file is excluded.\n// If the path contains a parent directory, check the parent first\n?this._filter(slices.join(SLASH)+SLASH,slices)&&this._test(path)// Or only test the path\n:this._test(path);}// @returns {Boolean} true if a file is NOT ignored\n},{key:'_test',value:function _test(path){// Explicitly define variable type by setting matched to `0`\nvar matched=0;this._rules.forEach(function(rule){// if matched = true, then we only test negative rules\n// if matched = false, then we test non-negative rules\nif(!(matched^rule.negative)){matched=rule.negative^rule.regex.test(path);}});return!matched;}}]);return IgnoreBase;}();// > 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// '`foo/`' should not continue with the '`..`'\nvar DEFAULT_REPLACER_PREFIX=[// > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n[// (a\\ ) -> (a )\n// (a  ) -> (a)\n// (a \\ ) -> (a  )\n/\\\\?\\s+$/,function(match){return match.indexOf('\\\\')===0?' ':'';}],// replace (\\ ) with ' '\n[/\\\\\\s/g,function(){return' ';}],// Escape metacharacters\n// which is written down by users but means special for regular expressions.\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[/[\\\\\\^$.|?*+()\\[{]/g,function(match){return'\\\\'+match;}],// leading slash\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/^\\//,function(){return'^';}],// replace special metacharacter slash after the leading slash\n[/\\//g,function(){return'\\\\/';}],[// > 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 under directory \"foo\".\n// Notice that the '*'s have been replaced as '\\\\*'\n/^\\^*\\\\\\*\\\\\\*\\\\\\//,// '**/foo' <-> 'foo'\nfunction(){return'^(?:.*\\\\/)?';}]];var DEFAULT_REPLACER_SUFFIX=[// starting\n[// there will be no leading '/' (which has been replaced by section \"leading slash\")\n// If starts with '**', adding a '^' to the regular expression also works\n/^(?=[^\\^])/,function(){return!/\\/(?!$)/.test(this)// > If the pattern does not contain a slash /, Git treats it as a shell glob pattern\n// Actually, if there is only a trailing slash, git also treats it as a shell glob pattern\n?'(?:^|\\\\/)'// > Otherwise, Git treats the pattern as a shell glob suitable for consumption by fnmatch(3)\n:'^';}],// two globstars\n[// Use lookahead assertions so that we could match more than one `'/**'`\n/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,// Zero, one or several directories\n// should not use '*', or it will be replaced by the next replacer\n// Check if it is not the last `'/**'`\nfunction(match,index,str){return index+6<str.length// case: /**/\n// > A slash followed by two consecutive asterisks then a slash matches zero or more directories.\n// > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n// '/**/'\n?'(?:\\\\/[^\\\\/]+)*'// case: /**\n// > A trailing `\"/**\"` matches everything inside.\n// #21: everything inside but it should not include the current folder\n:'\\\\/.+';}],// intermediate wildcards\n[// Never replace escaped '*'\n// ignore rule '\\*' will match the path '*'\n// 'abc.*/' -> go\n// 'abc.*'  -> skip this rule\n/(^|[^\\\\]+)\\\\\\*(?=.+)/g,// '*.js' matches '.js'\n// '*.js' doesn't match 'abc'\nfunction(match,p1){return p1+'[^\\\\/]*';}],// trailing wildcard\n[/(\\^|\\\\\\/)?\\\\\\*$/,function(match,p1){return(p1// '\\^':\n// '/*' does not match ''\n// '/*' does not match everything\n// '\\\\\\/':\n// 'abc/*' does not match 'abc/'\n?p1+'[^/]+'// 'a*' matches 'a'\n// 'a*' matches 'aa'\n:'[^/]*')+'(?=$|\\\\/$)';}],[// unescape\n/\\\\\\\\\\\\/g,function(){return'\\\\';}]];var POSITIVE_REPLACERS=[].concat(DEFAULT_REPLACER_PREFIX,[// 'f'\n// matches\n// - /f(end)\n// - /f/\n// - (start)f(end)\n// - (start)f/\n// doesn't match\n// - oof\n// - foo\n// pseudo:\n// -> (^|/)f(/|$)\n// ending\n[// 'js' will not match 'js.'\n// 'ab' will not match 'abc'\n/(?:[^*\\/])$/,// 'js*' will not match 'a.js'\n// 'js/' will not match 'a.js'\n// 'js' will match 'a.js' and 'a.js/'\nfunction(match){return match+'(?=$|\\\\/)';}]],DEFAULT_REPLACER_SUFFIX);var NEGATIVE_REPLACERS=[].concat(DEFAULT_REPLACER_PREFIX,[// #24\n// The MISSING rule of [gitignore docs](https://git-scm.com/docs/gitignore)\n// A negative pattern without a trailing wildcard should not\n// re-include the things inside that directory.\n// eg:\n// ['node_modules/*', '!node_modules']\n// should ignore `node_modules/a.js`\n[/(?:[^*\\/])$/,function(match){return match+'(?=$|\\\\/$)';}]],DEFAULT_REPLACER_SUFFIX);// A simple cache, because an ignore rule only has only one certain meaning\nvar cache={};// @param {pattern}\nfunction make_regex(pattern,negative){var r=cache[pattern];if(r){return r;}var replacers=negative?NEGATIVE_REPLACERS:POSITIVE_REPLACERS;var source=replacers.reduce(function(prev,current){return prev.replace(current[0],current[1].bind(pattern));},pattern);return cache[pattern]=new RegExp(source,'i');}// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if  */if(process.env.IGNORE_TEST_WIN32||process.platform==='win32'){var filter=IgnoreBase.prototype._filter;var make_posix=function make_posix(str){return /^\\\\\\\\\\?\\\\/.test(str)||/[^\\x00-\\x80]+/.test(str)?str:str.replace(/\\\\/g,'/');};IgnoreBase.prototype._filter=function(path,slices){path=make_posix(path);return filter.call(this,path,slices);};}}).call(this,require(\"_process\"));},{\"_process\":594}],378:[function(require,module,exports){/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */'use strict';/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */var invariant=function invariant(condition,format,a,b,c,d,e,f){if(\"developement\"!=='production'){if(format===undefined){throw new Error('invariant requires an error message argument');}}if(!condition){var error;if(format===undefined){error=new Error('Minified exception occurred; use the non-minified dev environment '+'for the full error message and additional helpful warnings.');}else{var args=[a,b,c,d,e,f];var argIndex=0;error=new Error(format.replace(/%s/g,function(){return args[argIndex++];}));error.name='Invariant Violation';}error.framesToPop=1;// we don't care about invariant's own frame\nthrow error;}};module.exports=invariant;},{}],379:[function(require,module,exports){'use strict';var fnToStr=Function.prototype.toString;var constructorRegex=/^\\s*class /;var isES6ClassFn=function isES6ClassFn(value){try{var fnStr=fnToStr.call(value);var singleStripped=fnStr.replace(/\\/\\/.*\\n/g,'');var multiStripped=singleStripped.replace(/\\/\\*[.\\s\\S]*\\*\\//g,'');var spaceStripped=multiStripped.replace(/\\n/mg,' ').replace(/ {2}/g,' ');return constructorRegex.test(spaceStripped);}catch(e){return false;// not a function\n}};var tryFunctionObject=function tryFunctionObject(value){try{if(isES6ClassFn(value)){return false;}fnToStr.call(value);return true;}catch(e){return false;}};var toStr=Object.prototype.toString;var fnClass='[object Function]';var genClass='[object GeneratorFunction]';var hasToStringTag=typeof _symbol4.default==='function'&&(0,_typeof6.default)(_toStringTag2.default)==='symbol';module.exports=function isCallable(value){if(!value){return false;}if(typeof value!=='function'&&(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))!=='object'){return false;}if(hasToStringTag){return tryFunctionObject(value);}if(isES6ClassFn(value)){return false;}var strClass=toStr.call(value);return strClass===fnClass||strClass===genClass;};},{}],380:[function(require,module,exports){'use strict';var getDay=Date.prototype.getDay;var tryDateObject=function tryDateObject(value){try{getDay.call(value);return true;}catch(e){return false;}};var toStr=Object.prototype.toString;var dateClass='[object Date]';var hasToStringTag=typeof _symbol4.default==='function'&&(0,_typeof6.default)(_toStringTag2.default)==='symbol';module.exports=function isDateObject(value){if((typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))!=='object'||value===null){return false;}return hasToStringTag?tryDateObject(value):toStr.call(value)===dateClass;};},{}],381:[function(require,module,exports){exports['date-time']=/^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?([zZ]|[+-]\\d{2}:\\d{2})$/;exports['date']=/^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/;exports['time']=/^\\d{2}:\\d{2}:\\d{2}$/;exports['email']=/^\\S+@\\S+$/;exports['ip-address']=exports['ipv4']=/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;exports['ipv6']=/^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;exports['uri']=/^[a-zA-Z][a-zA-Z0-9+-.]*:[^\\s]*$/;exports['color']=/(#?([0-9A-Fa-f]{3,6})\\b)|(aqua)|(black)|(blue)|(fuchsia)|(gray)|(green)|(lime)|(maroon)|(navy)|(olive)|(orange)|(purple)|(red)|(silver)|(teal)|(white)|(yellow)|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\))/;exports['hostname']=/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])(\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9]))*$/;exports['alpha']=/^[a-zA-Z]+$/;exports['alphanumeric']=/^[a-zA-Z0-9]+$/;exports['style']=/\\s*(.+?):\\s*([^;]+);?/g;exports['phone']=/^\\+(?:[0-9] ?){6,14}[0-9]$/;exports['utc-millisec']=/^[0-9]{1,15}\\.?[0-9]{0,15}$/;},{}],382:[function(require,module,exports){var genobj=require(\"generate-object-property\");var genfun=require(\"generate-function\");var jsonpointer=require(\"jsonpointer\");var xtend=require(\"xtend\");var formats=require(\"./formats\");var get=function get(obj,additionalSchemas,ptr){var visit=function visit(sub){if(sub&&sub.id===ptr)return sub;if((typeof sub===\"undefined\"?\"undefined\":(0,_typeof6.default)(sub))!=='object'||!sub)return null;return(0,_keys4.default)(sub).reduce(function(res,k){return res||visit(sub[k]);},null);};var res=visit(obj);if(res)return res;ptr=ptr.replace(/^#/,'');ptr=ptr.replace(/\\/$/,'');try{return jsonpointer.get(obj,decodeURI(ptr));}catch(err){var end=ptr.indexOf('#');var other;// external reference\nif(end!==0){// fragment doesn't exist.\nif(end===-1){other=additionalSchemas[ptr];}else{var ext=ptr.slice(0,end);other=additionalSchemas[ext];var fragment=ptr.slice(end).replace(/^#/,'');try{return jsonpointer.get(other,fragment);}catch(err){}}}else{other=additionalSchemas[ptr];}return other||null;}};var formatName=function formatName(field){field=(0,_stringify4.default)(field);var pattern=/\\[([^\\[\\]\"]+)\\]/;while(pattern.test(field)){field=field.replace(pattern,'.\"+$1+\"');}return field;};var types={};types.any=function(){return'true';};types.null=function(name){return name+' === null';};types.boolean=function(name){return'typeof '+name+' === \"boolean\"';};types.array=function(name){return'Array.isArray('+name+')';};types.object=function(name){return'typeof '+name+' === \"object\" && '+name+' && !Array.isArray('+name+')';};types.number=function(name){return'typeof '+name+' === \"number\"';};types.integer=function(name){return'typeof '+name+' === \"number\" && (Math.floor('+name+') === '+name+' || '+name+' > 9007199254740992 || '+name+' < -9007199254740992)';};types.string=function(name){return'typeof '+name+' === \"string\"';};var unique=function unique(array){var list=[];for(var i=0;i<array.length;i++){list.push((0,_typeof6.default)(array[i])==='object'?(0,_stringify4.default)(array[i]):array[i]);}for(var i=1;i<list.length;i++){if(list.indexOf(list[i])!==i)return false;}return true;};var isMultipleOf=function isMultipleOf(name,multipleOf){var res;var factor=(multipleOf|0)!==multipleOf?Math.pow(10,multipleOf.toString().split('.').pop().length):1;if(factor>1){var factorName=(name|0)!==name?Math.pow(10,name.toString().split('.').pop().length):1;if(factorName>factor)res=true;else res=Math.round(factor*name)%(factor*multipleOf);}else res=name%multipleOf;return!res;};var compile=function compile(schema,cache,root,reporter,opts){var fmts=opts?xtend(formats,opts.formats):formats;var scope={unique:unique,formats:fmts,isMultipleOf:isMultipleOf};var verbose=opts?!!opts.verbose:false;var greedy=opts&&opts.greedy!==undefined?opts.greedy:false;var syms={};var gensym=function gensym(name){return name+(syms[name]=(syms[name]||0)+1);};var reversePatterns={};var patterns=function patterns(p){if(reversePatterns[p])return reversePatterns[p];var n=gensym('pattern');scope[n]=new RegExp(p);reversePatterns[p]=n;return n;};var vars=['i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z'];var genloop=function genloop(){var v=vars.shift();vars.push(v+v[0]);return v;};var visit=function visit(name,node,reporter,filter){var properties=node.properties;var type=node.type;var tuple=false;if(Array.isArray(node.items)){// tuple type\nproperties={};node.items.forEach(function(item,i){properties[i]=item;});type='array';tuple=true;}var indent=0;var error=function error(msg,prop,value){validate('errors++');if(reporter===true){validate('if (validate.errors === null) validate.errors = []');if(verbose){validate('validate.errors.push({field:%s,message:%s,value:%s,type:%s})',formatName(prop||name),(0,_stringify4.default)(msg),value||name,(0,_stringify4.default)(type));}else{validate('validate.errors.push({field:%s,message:%s})',formatName(prop||name),(0,_stringify4.default)(msg));}}};if(node.required===true){indent++;validate('if (%s === undefined) {',name);error('is required');validate('} else {');}else{indent++;validate('if (%s !== undefined) {',name);}var valid=[].concat(type).map(function(t){if(t&&!types.hasOwnProperty(t)){throw new Error('Unknown type: '+t);}return types[t||'any'](name);}).join(' || ')||'true';if(valid!=='true'){indent++;validate('if (!(%s)) {',valid);error('is the wrong type');validate('} else {');}if(tuple){if(node.additionalItems===false){validate('if (%s.length > %d) {',name,node.items.length);error('has additional items');validate('}');}else if(node.additionalItems){var i=genloop();validate('for (var %s = %d; %s < %s.length; %s++) {',i,node.items.length,i,name,i);visit(name+'['+i+']',node.additionalItems,reporter,filter);validate('}');}}if(node.format&&fmts[node.format]){if(type!=='string'&&formats[node.format])validate('if (%s) {',types.string(name));var n=gensym('format');scope[n]=fmts[node.format];if(typeof scope[n]==='function')validate('if (!%s(%s)) {',n,name);else validate('if (!%s.test(%s)) {',n,name);error('must be '+node.format+' format');validate('}');if(type!=='string'&&formats[node.format])validate('}');}if(Array.isArray(node.required)){var checkRequired=function checkRequired(req){var prop=genobj(name,req);validate('if (%s === undefined) {',prop);error('is required',prop);validate('missing++');validate('}');};validate('if ((%s)) {',type!=='object'?types.object(name):'true');validate('var missing = 0');node.required.map(checkRequired);validate('}');if(!greedy){validate('if (missing === 0) {');indent++;}}if(node.uniqueItems){if(type!=='array')validate('if (%s) {',types.array(name));validate('if (!(unique(%s))) {',name);error('must be unique');validate('}');if(type!=='array')validate('}');}if(node.enum){var complex=node.enum.some(function(e){return(typeof e===\"undefined\"?\"undefined\":(0,_typeof6.default)(e))==='object';});var compare=complex?function(e){return'JSON.stringify('+name+')'+' !== JSON.stringify('+(0,_stringify4.default)(e)+')';}:function(e){return name+' !== '+(0,_stringify4.default)(e);};validate('if (%s) {',node.enum.map(compare).join(' && ')||'false');error('must be an enum value');validate('}');}if(node.dependencies){if(type!=='object')validate('if (%s) {',types.object(name));(0,_keys4.default)(node.dependencies).forEach(function(key){var deps=node.dependencies[key];if(typeof deps==='string')deps=[deps];var exists=function exists(k){return genobj(name,k)+' !== undefined';};if(Array.isArray(deps)){validate('if (%s !== undefined && !(%s)) {',genobj(name,key),deps.map(exists).join(' && ')||'true');error('dependencies not set');validate('}');}if((typeof deps===\"undefined\"?\"undefined\":(0,_typeof6.default)(deps))==='object'){validate('if (%s !== undefined) {',genobj(name,key));visit(name,deps,reporter,filter);validate('}');}});if(type!=='object')validate('}');}if(node.additionalProperties||node.additionalProperties===false){if(type!=='object')validate('if (%s) {',types.object(name));var i=genloop();var keys=gensym('keys');var toCompare=function toCompare(p){return keys+'['+i+'] !== '+(0,_stringify4.default)(p);};var toTest=function toTest(p){return'!'+patterns(p)+'.test('+keys+'['+i+'])';};var additionalProp=(0,_keys4.default)(properties||{}).map(toCompare).concat((0,_keys4.default)(node.patternProperties||{}).map(toTest)).join(' && ')||'true';validate('var %s = Object.keys(%s)',keys,name)('for (var %s = 0; %s < %s.length; %s++) {',i,i,keys,i)('if (%s) {',additionalProp);if(node.additionalProperties===false){if(filter)validate('delete %s',name+'['+keys+'['+i+']]');error('has additional properties',null,(0,_stringify4.default)(name+'.')+' + '+keys+'['+i+']');}else{visit(name+'['+keys+'['+i+']]',node.additionalProperties,reporter,filter);}validate('}')('}');if(type!=='object')validate('}');}if(node.$ref){var sub=get(root,opts&&opts.schemas||{},node.$ref);if(sub){var fn=cache[node.$ref];if(!fn){cache[node.$ref]=function proxy(data){return fn(data);};fn=compile(sub,cache,root,false,opts);}var n=gensym('ref');scope[n]=fn;validate('if (!(%s(%s))) {',n,name);error('referenced schema does not match');validate('}');}}if(node.not){var prev=gensym('prev');validate('var %s = errors',prev);visit(name,node.not,false,filter);validate('if (%s === errors) {',prev);error('negative schema matches');validate('} else {')('errors = %s',prev)('}');}if(node.items&&!tuple){if(type!=='array')validate('if (%s) {',types.array(name));var i=genloop();validate('for (var %s = 0; %s < %s.length; %s++) {',i,i,name,i);visit(name+'['+i+']',node.items,reporter,filter);validate('}');if(type!=='array')validate('}');}if(node.patternProperties){if(type!=='object')validate('if (%s) {',types.object(name));var keys=gensym('keys');var i=genloop();validate('var %s = Object.keys(%s)',keys,name)('for (var %s = 0; %s < %s.length; %s++) {',i,i,keys,i);(0,_keys4.default)(node.patternProperties).forEach(function(key){var p=patterns(key);validate('if (%s.test(%s)) {',p,keys+'['+i+']');visit(name+'['+keys+'['+i+']]',node.patternProperties[key],reporter,filter);validate('}');});validate('}');if(type!=='object')validate('}');}if(node.pattern){var p=patterns(node.pattern);if(type!=='string')validate('if (%s) {',types.string(name));validate('if (!(%s.test(%s))) {',p,name);error('pattern mismatch');validate('}');if(type!=='string')validate('}');}if(node.allOf){node.allOf.forEach(function(sch){visit(name,sch,reporter,filter);});}if(node.anyOf&&node.anyOf.length){var prev=gensym('prev');node.anyOf.forEach(function(sch,i){if(i===0){validate('var %s = errors',prev);}else{validate('if (errors !== %s) {',prev)('errors = %s',prev);}visit(name,sch,false,false);});node.anyOf.forEach(function(sch,i){if(i)validate('}');});validate('if (%s !== errors) {',prev);error('no schemas match');validate('}');}if(node.oneOf&&node.oneOf.length){var prev=gensym('prev');var passes=gensym('passes');validate('var %s = errors',prev)('var %s = 0',passes);node.oneOf.forEach(function(sch,i){visit(name,sch,false,false);validate('if (%s === errors) {',prev)('%s++',passes)('} else {')('errors = %s',prev)('}');});validate('if (%s !== 1) {',passes);error('no (or more than one) schemas match');validate('}');}if(node.multipleOf!==undefined){if(type!=='number'&&type!=='integer')validate('if (%s) {',types.number(name));validate('if (!isMultipleOf(%s, %d)) {',name,node.multipleOf);error('has a remainder');validate('}');if(type!=='number'&&type!=='integer')validate('}');}if(node.maxProperties!==undefined){if(type!=='object')validate('if (%s) {',types.object(name));validate('if (Object.keys(%s).length > %d) {',name,node.maxProperties);error('has more properties than allowed');validate('}');if(type!=='object')validate('}');}if(node.minProperties!==undefined){if(type!=='object')validate('if (%s) {',types.object(name));validate('if (Object.keys(%s).length < %d) {',name,node.minProperties);error('has less properties than allowed');validate('}');if(type!=='object')validate('}');}if(node.maxItems!==undefined){if(type!=='array')validate('if (%s) {',types.array(name));validate('if (%s.length > %d) {',name,node.maxItems);error('has more items than allowed');validate('}');if(type!=='array')validate('}');}if(node.minItems!==undefined){if(type!=='array')validate('if (%s) {',types.array(name));validate('if (%s.length < %d) {',name,node.minItems);error('has less items than allowed');validate('}');if(type!=='array')validate('}');}if(node.maxLength!==undefined){if(type!=='string')validate('if (%s) {',types.string(name));validate('if (%s.length > %d) {',name,node.maxLength);error('has longer length than allowed');validate('}');if(type!=='string')validate('}');}if(node.minLength!==undefined){if(type!=='string')validate('if (%s) {',types.string(name));validate('if (%s.length < %d) {',name,node.minLength);error('has less length than allowed');validate('}');if(type!=='string')validate('}');}if(node.minimum!==undefined){if(type!=='number'&&type!=='integer')validate('if (%s) {',types.number(name));validate('if (%s %s %d) {',name,node.exclusiveMinimum?'<=':'<',node.minimum);error('is less than minimum');validate('}');if(type!=='number'&&type!=='integer')validate('}');}if(node.maximum!==undefined){if(type!=='number'&&type!=='integer')validate('if (%s) {',types.number(name));validate('if (%s %s %d) {',name,node.exclusiveMaximum?'>=':'>',node.maximum);error('is more than maximum');validate('}');if(type!=='number'&&type!=='integer')validate('}');}if(properties){(0,_keys4.default)(properties).forEach(function(p){if(Array.isArray(type)&&type.indexOf('null')!==-1)validate('if (%s !== null) {',name);visit(genobj(name,p),properties[p],reporter,filter);if(Array.isArray(type)&&type.indexOf('null')!==-1)validate('}');});}while(indent--){validate('}');}};var validate=genfun('function validate(data) {')// Since undefined is not a valid JSON value, we coerce to null and other checks will catch this\n('if (data === undefined) data = null')('validate.errors = null')('var errors = 0');visit('data',schema,reporter,opts&&opts.filter);validate('return errors === 0')('}');validate=validate.toFunction(scope);validate.errors=null;if(_defineProperty3.default){Object.defineProperty(validate,'error',{get:function get(){if(!validate.errors)return'';return validate.errors.map(function(err){return err.field+' '+err.message;}).join('\\n');}});}validate.toJSON=function(){return schema;};return validate;};module.exports=function(schema,opts){if(typeof schema==='string')schema=JSON.parse(schema);return compile(schema,{},schema,true,opts);};module.exports.filter=function(schema,opts){var validate=module.exports(schema,xtend(opts,{filter:true}));return function(sch){validate(sch);return sch;};};},{\"./formats\":381,\"generate-function\":371,\"generate-object-property\":372,\"jsonpointer\":387,\"xtend\":603}],383:[function(require,module,exports){\"use strict\";function isProperty(str){return /^[$A-Z\\_a-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\\u16ee-\\u16f0\\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\\u2160-\\u2188\\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-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\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-\\ua6ef\\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][$A-Z\\_a-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\\u16ee-\\u16f0\\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\\u2160-\\u2188\\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-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\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-\\ua6ef\\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-\\uffdc0-9\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19b0-\\u19c0\\u19c8\\u19c9\\u19d0-\\u19d9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2-\\u1cf4\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua900-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f]*$/.test(str);}module.exports=isProperty;},{}],384:[function(require,module,exports){'use strict';var has=require(\"has\");var regexExec=RegExp.prototype.exec;var gOPD=_getOwnPropertyDescriptor2.default;var tryRegexExecCall=function tryRegexExec(value){try{var lastIndex=value.lastIndex;value.lastIndex=0;regexExec.call(value);return true;}catch(e){return false;}finally{value.lastIndex=lastIndex;}};var toStr=Object.prototype.toString;var regexClass='[object RegExp]';var hasToStringTag=typeof _symbol4.default==='function'&&(0,_typeof6.default)(_toStringTag2.default)==='symbol';module.exports=function isRegex(value){if(!value||(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))!=='object'){return false;}if(!hasToStringTag){return toStr.call(value)===regexClass;}var descriptor=gOPD(value,'lastIndex');var hasLastIndexDataProperty=descriptor&&has(descriptor,'value');if(!hasLastIndexDataProperty){return false;}return tryRegexExecCall(value);};},{\"has\":376}],385:[function(require,module,exports){'use strict';var toStr=Object.prototype.toString;var hasSymbols=typeof _symbol4.default==='function'&&(0,_typeof6.default)((0,_symbol4.default)())==='symbol';if(hasSymbols){var symToStr=_symbol4.default.prototype.toString;var symStringRegex=/^Symbol\\(.*\\)$/;var isSymbolObject=function isSymbolObject(value){if((0,_typeof6.default)(value.valueOf())!=='symbol'){return false;}return symStringRegex.test(symToStr.call(value));};module.exports=function isSymbol(value){if((typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))==='symbol'){return true;}if(toStr.call(value)!=='[object Symbol]'){return false;}try{return isSymbolObject(value);}catch(e){return false;}};}else{module.exports=function isSymbol(value){// this environment does not support Symbols.\nreturn false;};}},{}],386:[function(require,module,exports){// Copyright 2014, 2015, 2016, 2017 Simon Lydell\n// License: MIT. (See LICENSE.)\nObject.defineProperty(exports,\"__esModule\",{value:true});// This regex comes from regex.coffee, and is inserted here by generate-index.js\n// (run `npm run build`).\nexports.default=/((['\"])(?:(?!\\2|\\\\).|\\\\(?:\\r\\n|[\\s\\S]))*(\\2)?|`(?:[^`\\\\$]|\\\\[\\s\\S]|\\$(?!\\{)|\\$\\{(?:[^{}]|\\{[^}]*\\}?)*\\}?)*(`)?)|(\\/\\/.*)|(\\/\\*(?:[^*]|\\*(?!\\/))*(\\*\\/)?)|(\\/(?!\\*)(?:\\[(?:(?![\\]\\\\]).|\\\\.)*\\]|(?![\\/\\]\\\\]).|\\\\.)+\\/(?:(?!\\s*(?:\\b|[\\u0080-\\uFFFF$\\\\'\"~({]|[+\\-!](?!=)|\\.?\\d))|[gmiyu]{1,5}\\b(?![\\u0080-\\uFFFF$\\\\]|\\s*(?:[+\\-*%&|^<>!=?({]|\\/(?![\\/*])))))|(0[xX][\\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?)|((?!\\d)(?:(?!\\s)[$\\w\\u0080-\\uFFFF]|\\\\u[\\da-fA-F]{4}|\\\\u\\{[\\da-fA-F]+\\})+)|(--|\\+\\+|&&|\\|\\||=>|\\.{3}|(?:[+\\-\\/%&|^]|\\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\\](){}])|(\\s+)|(^$|[\\s\\S])/g;exports.matchToToken=function(match){var token={type:\"invalid\",value:match[0]};if(match[1])token.type=\"string\",token.closed=!!(match[3]||match[4]);else if(match[5])token.type=\"comment\";else if(match[6])token.type=\"comment\",token.closed=!!match[7];else if(match[8])token.type=\"regex\";else if(match[9])token.type=\"number\";else if(match[10])token.type=\"name\";else if(match[11])token.type=\"punctuator\";else if(match[12])token.type=\"whitespace\";return token;};},{}],387:[function(require,module,exports){var hasExcape=/~/;var escapeMatcher=/~[01]/g;function escapeReplacer(m){switch(m){case'~1':return'/';case'~0':return'~';}throw new Error('Invalid tilde escape: '+m);}function untilde(str){if(!hasExcape.test(str))return str;return str.replace(escapeMatcher,escapeReplacer);}function setter(obj,pointer,value){var part;var hasNextPart;for(var p=1,len=pointer.length;p<len;){part=untilde(pointer[p++]);hasNextPart=len>p;if(typeof obj[part]==='undefined'){// support setting of /-\nif(Array.isArray(obj)&&part==='-'){part=obj.length;}// support nested objects/array when setting values\nif(hasNextPart){if(pointer[p]!==''&&pointer[p]<Infinity||pointer[p]==='-')obj[part]=[];else obj[part]={};}}if(!hasNextPart)break;obj=obj[part];}var oldValue=obj[part];if(value===undefined)delete obj[part];else obj[part]=value;return oldValue;}function compilePointer(pointer){if(typeof pointer==='string'){pointer=pointer.split('/');if(pointer[0]==='')return pointer;throw new Error('Invalid JSON pointer.');}else if(Array.isArray(pointer)){return pointer;}throw new Error('Invalid JSON pointer.');}function _get2(obj,pointer){if((typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj))!=='object')throw new Error('Invalid input object.');pointer=compilePointer(pointer);var len=pointer.length;if(len===1)return obj;for(var p=1;p<len;){obj=obj[untilde(pointer[p++])];if(len===p)return obj;if((typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj))!=='object')return undefined;}}function _set(obj,pointer,value){if((typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj))!=='object')throw new Error('Invalid input object.');pointer=compilePointer(pointer);if(pointer.length===0)throw new Error('Invalid JSON pointer for set.');return setter(obj,pointer,value);}function compile(pointer){var compiled=compilePointer(pointer);return{get:function get(object){return _get2(object,compiled);},set:function set(object,value){return _set(object,compiled,value);}};}exports.get=_get2;exports.set=_set;exports.compile=compile;},{}],388:[function(require,module,exports){module.exports=require(\"./lib\").elementType;// eslint-disable-line import/no-unresolved\n},{\"./lib\":395}],389:[function(require,module,exports){module.exports=require(\"./lib\").hasProp;// eslint-disable-line import/no-unresolved\n},{\"./lib\":395}],390:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=elementType;function resolveMemberExpressions(){var object=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var property=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(object.type==='JSXMemberExpression'){return resolveMemberExpressions(object.object,object.property)+'.'+property.name;}return object.name+'.'+property.name;}/**\n * Returns the tagName associated with a JSXElement.\n */function elementType(){var node=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var name=node.name;if(!name){throw new Error('The argument provided is not a JSXElement node.');}if(name.type==='JSXMemberExpression'){var _name$object=name.object,object=_name$object===undefined?{}:_name$object,_name$property=name.property,property=_name$property===undefined?{}:_name$property;return resolveMemberExpressions(object,property);}else if(name.type==='JSXNamespacedName'){return name.namespace.name+':'+name.name.name;}return node.name.name;}},{}],391:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});/**\n * Common event handlers for JSX element event binding.\n */var eventHandlersByType={clipboard:['onCopy','onCut','onPaste'],composition:['onCompositionEnd','onCompositionStart','onCompositionUpdate'],keyboard:['onKeyDown','onKeyPress','onKeyUp'],focus:['onFocus','onBlur'],form:['onChange','onInput','onSubmit'],mouse:['onClick','onContextMenu','onDblClick','onDoubleClick','onDrag','onDragEnd','onDragEnter','onDragExit','onDragLeave','onDragOver','onDragStart','onDrop','onMouseDown','onMouseEnter','onMouseLeave','onMouseMove','onMouseOut','onMouseOver','onMouseUp'],selection:['onSelect'],touch:['onTouchCancel','onTouchEnd','onTouchMove','onTouchStart'],ui:['onScroll'],wheel:['onWheel'],media:['onAbort','onCanPlay','onCanPlayThrough','onDurationChange','onEmptied','onEncrypted','onEnded','onError','onLoadedData','onLoadedMetadata','onLoadStart','onPause','onPlay','onPlaying','onProgress','onRateChange','onSeeked','onSeeking','onStalled','onSuspend','onTimeUpdate','onVolumeChange','onWaiting'],image:['onLoad','onError'],animation:['onAnimationStart','onAnimationEnd','onAnimationIteration'],transition:['onTransitionEnd']};var eventHandlers=(0,_keys4.default)(eventHandlersByType).reduce(function(accumulator,type){return accumulator.concat(eventHandlersByType[type]);},[]);exports.default=eventHandlers;exports.eventHandlersByType=eventHandlersByType;},{}],392:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=getProp;var _propName=require(\"./propName\");var _propName2=_interopRequireDefault(_propName);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var DEFAULT_OPTIONS={ignoreCase:true};/**\n * Returns the JSXAttribute itself or undefined, indicating the prop\n * is not present on the JSXOpeningElement.\n *\n */function getProp(){var props=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var prop=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:DEFAULT_OPTIONS;var propToFind=options.ignoreCase?prop.toUpperCase():prop;return props.find(function(attribute){// If the props contain a spread prop, then skip.\nif(attribute.type==='JSXSpreadAttribute'){return false;}var currentProp=options.ignoreCase?(0,_propName2.default)(attribute).toUpperCase():(0,_propName2.default)(attribute);return propToFind===currentProp;});}},{\"./propName\":396}],393:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=getPropValue;exports.getLiteralPropValue=getLiteralPropValue;var _values=require(\"./values\");var _values2=_interopRequireDefault(_values);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var extractValue=function extractValue(attribute,extractor){if(attribute&&attribute.type==='JSXAttribute'){if(attribute.value===null){// Null valued attributes imply truthiness.\n// For example: <div aria-hidden />\n// See: https://facebook.github.io/react/docs/jsx-in-depth.html#boolean-attributes\nreturn true;}return extractor(attribute.value);}return undefined;};/**\n * Returns the value of a given attribute.\n * Different types of attributes have their associated\n * values in different properties on the object.\n *\n * This function should return the most *closely* associated\n * value with the intention of the JSX.\n *\n * @param attribute - The JSXAttribute collected by AST parser.\n */function getPropValue(attribute){return extractValue(attribute,_values2.default);}/**\n * Returns the value of a given attribute.\n * Different types of attributes have their associated\n * values in different properties on the object.\n *\n * This function should return a value only if we can extract\n * a literal value from its attribute (i.e. values that have generic\n * types in JavaScript - strings, numbers, booleans, etc.)\n *\n * @param attribute - The JSXAttribute collected by AST parser.\n */function getLiteralPropValue(attribute){return extractValue(attribute,_values.getLiteralValue);}},{\"./values\":415}],394:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=hasProp;exports.hasAnyProp=hasAnyProp;exports.hasEveryProp=hasEveryProp;var _propName=require(\"./propName\");var _propName2=_interopRequireDefault(_propName);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var DEFAULT_OPTIONS={spreadStrict:true,ignoreCase:true};/**\n * Returns boolean indicating whether an prop exists on the props\n * property of a JSX element node.\n */function hasProp(){var props=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var prop=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:DEFAULT_OPTIONS;var propToCheck=options.ignoreCase?prop.toUpperCase():prop;return props.some(function(attribute){// If the props contain a spread prop, then refer to strict param.\nif(attribute.type==='JSXSpreadAttribute'){return!options.spreadStrict;}var currentProp=options.ignoreCase?(0,_propName2.default)(attribute).toUpperCase():(0,_propName2.default)(attribute);return propToCheck===currentProp;});}/**\n * Given the props on a node and a list of props to check, this returns a boolean\n * indicating if any of them exist on the node.\n */function hasAnyProp(){var nodeProps=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var props=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:DEFAULT_OPTIONS;var propsToCheck=typeof props==='string'?props.split(' '):props;return propsToCheck.some(function(prop){return hasProp(nodeProps,prop,options);});}/**\n * Given the props on a node and a list of props to check, this returns a boolean\n * indicating if all of them exist on the node\n */function hasEveryProp(){var nodeProps=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var props=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:DEFAULT_OPTIONS;var propsToCheck=typeof props==='string'?props.split(' '):props;return propsToCheck.every(function(prop){return hasProp(nodeProps,prop,options);});}},{\"./propName\":396}],395:[function(require,module,exports){'use strict';var _hasProp=require(\"./hasProp\");var _hasProp2=_interopRequireDefault(_hasProp);var _elementType=require(\"./elementType\");var _elementType2=_interopRequireDefault(_elementType);var _eventHandlers=require(\"./eventHandlers\");var _eventHandlers2=_interopRequireDefault(_eventHandlers);var _getProp=require(\"./getProp\");var _getProp2=_interopRequireDefault(_getProp);var _getPropValue=require(\"./getPropValue\");var _getPropValue2=_interopRequireDefault(_getPropValue);var _propName=require(\"./propName\");var _propName2=_interopRequireDefault(_propName);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}module.exports={hasProp:_hasProp2.default,hasAnyProp:_hasProp.hasAnyProp,hasEveryProp:_hasProp.hasEveryProp,elementType:_elementType2.default,eventHandlers:_eventHandlers2.default,eventHandlersByType:_eventHandlers.eventHandlersByType,getProp:_getProp2.default,getPropValue:_getPropValue2.default,getLiteralPropValue:_getPropValue.getLiteralPropValue,propName:_propName2.default};},{\"./elementType\":390,\"./eventHandlers\":391,\"./getProp\":392,\"./getPropValue\":393,\"./hasProp\":394,\"./propName\":396}],396:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=propName;/**\n * Returns the name of the prop given the JSXAttribute object.\n */function propName(){var prop=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(!prop.type||prop.type!=='JSXAttribute'){throw new Error('The prop must be a JSXAttribute collected by the AST parser.');}switch(prop.name.type){case'JSXIdentifier':return prop.name.name;case'JSXNamespacedName':return prop.name.namespace.name+':'+prop.name.name.name;default:return undefined;}}},{}],397:[function(require,module,exports){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromJSXElement;/**\n * Extractor function for a JSXElement type value node.\n *\n * Returns self-closing element with correct name.\n */function extractValueFromJSXElement(value){return\"<\"+value.openingElement.name.name+\" />\";}},{}],398:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromLiteral;/**\n * Extractor function for a Literal type value node.\n *\n * @param - value - AST Value object with type `Literal`\n * @returns { String|Boolean } - The extracted value converted to correct type.\n */function extractValueFromLiteral(value){var extractedValue=value.value;var normalizedStringValue=typeof extractedValue==='string'&&extractedValue.toLowerCase();if(normalizedStringValue==='true'){return true;}else if(normalizedStringValue==='false'){return false;}return extractedValue;}},{}],399:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromArrayExpression;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for an ArrayExpression type value node.\n * An array expression is an expression with [] syntax.\n *\n * @returns - An array of the extracted elements.\n */function extractValueFromArrayExpression(value){return value.elements.map(function(element){return(0,_index2.default)(element);});}},{\"./index\":414}],400:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromBinaryExpression;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for a BinaryExpression type value node.\n * A binary expression has a left and right side separated by an operator\n * such as `a + b`.\n *\n * @param - value - AST Value object with type `BinaryExpression`\n * @returns - The extracted value converted to correct type.\n */function extractValueFromBinaryExpression(value){var operator=value.operator,left=value.left,right=value.right;var leftVal=(0,_index2.default)(left);var rightVal=(0,_index2.default)(right);switch(operator){case'==':return leftVal==rightVal;// eslint-disable-line\ncase'!=':return leftVal!=rightVal;// eslint-disable-line\ncase'===':return leftVal===rightVal;case'!==':return leftVal!==rightVal;case'<':return leftVal<rightVal;case'<=':return leftVal<=rightVal;case'>':return leftVal>rightVal;case'>=':return leftVal>=rightVal;case'<<':return leftVal<<rightVal;// eslint-disable-line no-bitwise\ncase'>>':return leftVal>>rightVal;// eslint-disable-line no-bitwise\ncase'>>>':return leftVal>>>rightVal;// eslint-disable-line no-bitwise\ncase'+':return leftVal+rightVal;case'-':return leftVal-rightVal;case'*':return leftVal*rightVal;case'/':return leftVal/rightVal;case'%':return leftVal%rightVal;case'|':return leftVal|rightVal;// eslint-disable-line no-bitwise\ncase'^':return leftVal^rightVal;// eslint-disable-line no-bitwise\ncase'&':return leftVal&rightVal;// eslint-disable-line no-bitwise\ncase'in':try{return leftVal in rightVal;}catch(err){return false;}case'instanceof':if(typeof rightVal!=='function'){return false;}return leftVal instanceof rightVal;default:return undefined;}}},{\"./index\":414}],401:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromCallExpression;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for a CallExpression type value node.\n * A call expression looks like `bar()`\n * This will return `bar` as the value to indicate its existence,\n * since we can not execute the function bar in a static environment.\n *\n * @param - value - AST Value object with type `CallExpression`\n * @returns - The extracted value converted to correct type.\n */function extractValueFromCallExpression(value){return(0,_index2.default)(value.callee);}},{\"./index\":414}],402:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromConditionalExpression;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for a ConditionalExpression type value node.\n *\n * @param - value - AST Value object with type `ConditionalExpression`\n * @returns - The extracted value converted to correct type.\n */function extractValueFromConditionalExpression(value){var test=value.test,alternate=value.alternate,consequent=value.consequent;return(0,_index2.default)(test)?(0,_index2.default)(consequent):(0,_index2.default)(alternate);}},{\"./index\":414}],403:[function(require,module,exports){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromFunctionExpression;/**\n * Extractor function for a FunctionExpression type value node.\n * Statically, we can't execute the given function, so just return a function\n * to indicate that the value is present.\n *\n * @param - value - AST Value object with type `FunctionExpression`\n * @returns - The extracted value converted to correct type.\n */function extractValueFromFunctionExpression(value){return function(){return value;};}},{}],404:[function(require,module,exports){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromIdentifier;var JS_RESERVED={Array:Array,Date:Date,Infinity:Infinity,Math:Math,Number:Number,Object:Object,String:String,undefined:undefined};/**\n * Extractor function for a Identifier type value node.\n * An Identifier is usually a reference to a variable.\n * Just return variable name to determine its existence.\n *\n * @param - value - AST Value object with type `Identifier`\n * @returns - The extracted value converted to correct type.\n */function extractValueFromIdentifier(value){var name=value.name;if(Object.hasOwnProperty.call(JS_RESERVED,name)){return JS_RESERVED[name];}return name;}},{}],405:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromLogicalExpression;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for a LogicalExpression type value node.\n * A logical expression is `a && b` or `a || b`, so we evaluate both sides\n * and return the extracted value of the expression.\n *\n * @param - value - AST Value object with type `LogicalExpression`\n * @returns - The extracted value converted to correct type.\n */function extractValueFromLogicalExpression(value){var operator=value.operator,left=value.left,right=value.right;var leftVal=(0,_index2.default)(left);var rightVal=(0,_index2.default)(right);return operator==='&&'?leftVal&&rightVal:leftVal||rightVal;}},{\"./index\":414}],406:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromMemberExpression;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for a MemberExpression type value node.\n * A member expression is accessing a property on an object `obj.property`.\n *\n * @param - value - AST Value object with type `MemberExpression`\n * @returns - The extracted value converted to correct type\n *  and maintaing `obj.property` convention.\n */function extractValueFromMemberExpression(value){return(0,_index2.default)(value.object)+'.'+(0,_index2.default)(value.property);}},{\"./index\":414}],407:[function(require,module,exports){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromNewExpression;/**\n * Extractor function for a NewExpression type value node.\n * A new expression instantiates an object with `new` keyword.\n *\n * @returns - an empty object.\n */function extractValueFromNewExpression(){return new Object();// eslint-disable-line\n}},{}],408:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromObjectExpression;var _objectAssign=require(\"object-assign\");var _objectAssign2=_interopRequireDefault(_objectAssign);var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for an ObjectExpression type value node.\n * An object expression is using {}.\n *\n * @returns - a representation of the object\n */function extractValueFromObjectExpression(value){return value.properties.reduce(function(obj,property){var object=(0,_objectAssign2.default)({},obj);object[(0,_index2.default)(property.key)]=(0,_index2.default)(property.value);return object;},{});}},{\"./index\":414,\"object-assign\":579}],409:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromTaggedTemplateExpression;var _TemplateLiteral=require(\"./TemplateLiteral\");var _TemplateLiteral2=_interopRequireDefault(_TemplateLiteral);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Returns the string value of a tagged template literal object.\n * Redirects the bulk of the work to `TemplateLiteral`.\n */function extractValueFromTaggedTemplateExpression(value){return(0,_TemplateLiteral2.default)(value.quasi);}},{\"./TemplateLiteral\":410}],410:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromTemplateLiteral;/**\n * Returns the string value of a template literal object.\n * Tries to build it as best as it can based on the passed\n * prop. For instance `This is a ${prop}` will return 'This is a {prop}'.\n *\n * If the template literal builds to undefined (`${undefined}`), then\n * this should return \"\".\n */function extractValueFromTemplateLiteral(value){var quasis=value.quasis,expressions=value.expressions;var partitions=quasis.concat(expressions);return partitions.sort(function(a,b){return a.start-b.start;}).reduce(function(raw,part){var type=part.type;if(type==='TemplateElement'){return raw+part.value.raw;}else if(type==='Identifier'){return part.name==='undefined'?raw:raw+'{'+part.name+'}';}else if(type.indexOf('Expression')>-1){return raw+'{'+type+'}';}return raw;},'');}},{}],411:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromThisExpression;/**\n * Extractor function for a ThisExpression type value node.\n * A this expression is using `this` as an identifier.\n *\n * @returns - 'this' as a string.\n */function extractValueFromThisExpression(){return'this';}},{}],412:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromUnaryExpression;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for a UnaryExpression type value node.\n * A unary expression is an expression with a unary operator.\n * For example, !\"foobar\" will evaluate to false, so this will return false.\n *\n * @param - value - AST Value object with type `UnaryExpression`\n * @returns - The extracted value converted to correct type.\n */function extractValueFromUnaryExpression(value){var operator=value.operator,argument=value.argument;switch(operator){case'-':return-(0,_index2.default)(argument);case'+':return+(0,_index2.default)(argument);// eslint-disable-line no-implicit-coercion\ncase'!':return!(0,_index2.default)(argument);case'~':return~(0,_index2.default)(argument);// eslint-disable-line no-bitwise\ncase'delete':// I believe delete statements evaluate to true.\nreturn true;case'typeof':case'void':default:return undefined;}}},{\"./index\":414}],413:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extractValueFromUpdateExpression;var _index=require(\"./index\");var _index2=_interopRequireDefault(_index);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/**\n * Extractor function for an UpdateExpression type value node.\n * An update expression is an expression with an update operator.\n * For example, foo++ will evaluate to foo + 1.\n *\n * @param - value - AST Value object with type `UpdateExpression`\n * @returns - The extracted value converted to correct type.\n */function extractValueFromUpdateExpression(value){var operator=value.operator,argument=value.argument,prefix=value.prefix;var val=(0,_index2.default)(argument);switch(operator){case'++':return prefix?++val:val++;// eslint-disable-line no-plusplus\ncase'--':return prefix?--val:val--;// eslint-disable-line no-plusplus\ndefault:return undefined;}}},{\"./index\":414}],414:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=extract;exports.extractLiteral=extractLiteral;var _objectAssign=require(\"object-assign\");var _objectAssign2=_interopRequireDefault(_objectAssign);var _Literal=require(\"../Literal\");var _Literal2=_interopRequireDefault(_Literal);var _JSXElement=require(\"../JSXElement\");var _JSXElement2=_interopRequireDefault(_JSXElement);var _Identifier=require(\"./Identifier\");var _Identifier2=_interopRequireDefault(_Identifier);var _TaggedTemplateExpression=require(\"./TaggedTemplateExpression\");var _TaggedTemplateExpression2=_interopRequireDefault(_TaggedTemplateExpression);var _TemplateLiteral=require(\"./TemplateLiteral\");var _TemplateLiteral2=_interopRequireDefault(_TemplateLiteral);var _FunctionExpression=require(\"./FunctionExpression\");var _FunctionExpression2=_interopRequireDefault(_FunctionExpression);var _LogicalExpression=require(\"./LogicalExpression\");var _LogicalExpression2=_interopRequireDefault(_LogicalExpression);var _MemberExpression=require(\"./MemberExpression\");var _MemberExpression2=_interopRequireDefault(_MemberExpression);var _CallExpression=require(\"./CallExpression\");var _CallExpression2=_interopRequireDefault(_CallExpression);var _UnaryExpression=require(\"./UnaryExpression\");var _UnaryExpression2=_interopRequireDefault(_UnaryExpression);var _ThisExpression=require(\"./ThisExpression\");var _ThisExpression2=_interopRequireDefault(_ThisExpression);var _ConditionalExpression=require(\"./ConditionalExpression\");var _ConditionalExpression2=_interopRequireDefault(_ConditionalExpression);var _BinaryExpression=require(\"./BinaryExpression\");var _BinaryExpression2=_interopRequireDefault(_BinaryExpression);var _ObjectExpression=require(\"./ObjectExpression\");var _ObjectExpression2=_interopRequireDefault(_ObjectExpression);var _NewExpression=require(\"./NewExpression\");var _NewExpression2=_interopRequireDefault(_NewExpression);var _UpdateExpression=require(\"./UpdateExpression\");var _UpdateExpression2=_interopRequireDefault(_UpdateExpression);var _ArrayExpression=require(\"./ArrayExpression\");var _ArrayExpression2=_interopRequireDefault(_ArrayExpression);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}// Composition map of types to their extractor functions.\nvar TYPES={Identifier:_Identifier2.default,Literal:_Literal2.default,JSXElement:_JSXElement2.default,TaggedTemplateExpression:_TaggedTemplateExpression2.default,TemplateLiteral:_TemplateLiteral2.default,ArrowFunctionExpression:_FunctionExpression2.default,FunctionExpression:_FunctionExpression2.default,LogicalExpression:_LogicalExpression2.default,MemberExpression:_MemberExpression2.default,CallExpression:_CallExpression2.default,UnaryExpression:_UnaryExpression2.default,ThisExpression:_ThisExpression2.default,ConditionalExpression:_ConditionalExpression2.default,BinaryExpression:_BinaryExpression2.default,ObjectExpression:_ObjectExpression2.default,NewExpression:_NewExpression2.default,UpdateExpression:_UpdateExpression2.default,ArrayExpression:_ArrayExpression2.default};var noop=function noop(){return null;};// Composition map of types to their extractor functions to handle literals.\nvar LITERAL_TYPES=(0,_objectAssign2.default)({},TYPES,{Literal:function Literal(value){var extractedVal=TYPES.Literal.call(undefined,value);var isNull=extractedVal===null;// This will be convention for attributes that have null\n// value explicitly defined (<div prop={null} /> maps to 'null').\nreturn isNull?'null':extractedVal;},Identifier:function Identifier(value){var isUndefined=TYPES.Identifier.call(undefined,value)===undefined;return isUndefined?undefined:null;},JSXElement:noop,ArrowFunctionExpression:noop,FunctionExpression:noop,LogicalExpression:noop,MemberExpression:noop,CallExpression:noop,UnaryExpression:function UnaryExpression(value){var extractedVal=TYPES.UnaryExpression.call(undefined,value);return extractedVal===undefined?null:extractedVal;},UpdateExpression:function UpdateExpression(value){var extractedVal=TYPES.UpdateExpression.call(undefined,value);return extractedVal===undefined?null:extractedVal;},ThisExpression:noop,ConditionalExpression:noop,BinaryExpression:noop,ObjectExpression:noop,NewExpression:noop,ArrayExpression:function ArrayExpression(value){var extractedVal=TYPES.ArrayExpression.call(undefined,value);return extractedVal.filter(function(val){return val!==null;});}});var errorMessage=function errorMessage(expression){return'The prop value with an expression type of '+expression+' could not be resolved.\\n  Please file issue to get this fixed immediately.';};/**\n * This function maps an AST value node\n * to its correct extractor function for its\n * given type.\n *\n * This will map correctly for *all* possible expression types.\n *\n * @param - value - AST Value object with type `JSXExpressionContainer`\n * @returns The extracted value.\n */function extract(value){// Value will not have the expression property when we recurse.\nvar expression=value.expression||value;var type=expression.type;if(TYPES[type]===undefined){throw new Error(errorMessage(type));}return TYPES[type](expression);}/**\n * This function maps an AST value node\n * to its correct extractor function for its\n * given type.\n *\n * This will map correctly for *some* possible types that map to literals.\n *\n * @param - value - AST Value object with type `JSXExpressionContainer`\n * @returns The extracted value.\n */function extractLiteral(value){// Value will not have the expression property when we recurse.\nvar expression=value.expression||value;var type=expression.type;if(LITERAL_TYPES[type]===undefined){throw new Error(errorMessage(type));}return LITERAL_TYPES[type](expression);}},{\"../JSXElement\":397,\"../Literal\":398,\"./ArrayExpression\":399,\"./BinaryExpression\":400,\"./CallExpression\":401,\"./ConditionalExpression\":402,\"./FunctionExpression\":403,\"./Identifier\":404,\"./LogicalExpression\":405,\"./MemberExpression\":406,\"./NewExpression\":407,\"./ObjectExpression\":408,\"./TaggedTemplateExpression\":409,\"./TemplateLiteral\":410,\"./ThisExpression\":411,\"./UnaryExpression\":412,\"./UpdateExpression\":413,\"object-assign\":579}],415:[function(require,module,exports){'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=getValue;exports.getLiteralValue=getLiteralValue;var _objectAssign=require(\"object-assign\");var _objectAssign2=_interopRequireDefault(_objectAssign);var _Literal=require(\"./Literal\");var _Literal2=_interopRequireDefault(_Literal);var _JSXElement=require(\"./JSXElement\");var _JSXElement2=_interopRequireDefault(_JSXElement);var _expressions=require(\"./expressions\");var _expressions2=_interopRequireDefault(_expressions);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}// Composition map of types to their extractor functions.\nvar TYPES={Literal:_Literal2.default,JSXElement:_JSXElement2.default,JSXExpressionContainer:_expressions2.default};// Composition map of types to their extractor functions to handle literals.\nvar LITERAL_TYPES=(0,_objectAssign2.default)({},TYPES,{JSXElement:function JSXElement(){return null;},JSXExpressionContainer:_expressions.extractLiteral});/**\n * This function maps an AST value node\n * to its correct extractor function for its\n * given type.\n *\n * This will map correctly for *all* possible types.\n *\n * @param value - AST Value object on a JSX Attribute.\n */function getValue(value){return TYPES[value.type](value);}/**\n * This function maps an AST value node\n * to its correct extractor function for its\n * given type.\n *\n * This will map correctly for *some* possible types that map to literals.\n *\n * @param value - AST Value object on a JSX Attribute.\n */function getLiteralValue(value){return LITERAL_TYPES[value.type](value);}},{\"./JSXElement\":397,\"./Literal\":398,\"./expressions\":414,\"object-assign\":579}],416:[function(require,module,exports){module.exports=require(\"./lib\").propName;// eslint-disable-line import/no-unresolved\n},{\"./lib\":395}],417:[function(require,module,exports){// Generated by LiveScript 1.4.0\n(function(){var parsedTypeCheck,types,toString$={}.toString;parsedTypeCheck=require(\"type-check\").parsedTypeCheck;types={'*':function _(value,options){switch(toString$.call(value).slice(8,-1)){case'Array':return typeCast(value,{type:'Array'},options);case'Object':return typeCast(value,{type:'Object'},options);default:return{type:'Just',value:typesCast(value,[{type:'Undefined'},{type:'Null'},{type:'NaN'},{type:'Boolean'},{type:'Number'},{type:'Date'},{type:'RegExp'},{type:'Array'},{type:'Object'},{type:'String'}],(options.explicit=true,options))};}},Undefined:function Undefined(it){if(it==='undefined'||it===void 8){return{type:'Just',value:void 8};}else{return{type:'Nothing'};}},Null:function Null(it){if(it==='null'){return{type:'Just',value:null};}else{return{type:'Nothing'};}},NaN:function(_NaN){function NaN(_x){return _NaN.apply(this,arguments);}NaN.toString=function(){return _NaN.toString();};return NaN;}(function(it){if(it==='NaN'){return{type:'Just',value:NaN};}else{return{type:'Nothing'};}}),Boolean:function Boolean(it){if(it==='true'){return{type:'Just',value:true};}else if(it==='false'){return{type:'Just',value:false};}else{return{type:'Nothing'};}},Number:function Number(it){return{type:'Just',value:+it};},Int:function Int(it){return{type:'Just',value:+it};},Float:function Float(it){return{type:'Just',value:+it};},Date:function(_Date){function Date(_x2,_x3){return _Date.apply(this,arguments);}Date.toString=function(){return _Date.toString();};return Date;}(function(value,options){var that;if(that=/^\\#([\\s\\S]*)\\#$/.exec(value)){return{type:'Just',value:new Date(+that[1]||that[1])};}else if(options.explicit){return{type:'Nothing'};}else{return{type:'Just',value:new Date(+value||value)};}}),RegExp:function(_RegExp){function RegExp(_x4,_x5){return _RegExp.apply(this,arguments);}RegExp.toString=function(){return _RegExp.toString();};return RegExp;}(function(value,options){var that;if(that=/^\\/([\\s\\S]*)\\/([gimy]*)$/.exec(value)){return{type:'Just',value:new RegExp(that[1],that[2])};}else if(options.explicit){return{type:'Nothing'};}else{return{type:'Just',value:new RegExp(value)};}}),Array:function Array(value,options){return castArray(value,{of:[{type:'*'}]},options);},Object:function Object(value,options){return castFields(value,{of:{}},options);},String:function String(it){var that;if(toString$.call(it).slice(8,-1)!=='String'){return{type:'Nothing'};}if(that=it.match(/^'([\\s\\S]*)'$/)){return{type:'Just',value:that[1].replace(/\\\\'/g,\"'\")};}else if(that=it.match(/^\"([\\s\\S]*)\"$/)){return{type:'Just',value:that[1].replace(/\\\\\"/g,'\"')};}else{return{type:'Just',value:it};}}};function castArray(node,type,options){var typeOf,element;if(toString$.call(node).slice(8,-1)!=='Array'){return{type:'Nothing'};}typeOf=type.of;return{type:'Just',value:function(){var i$,ref$,len$,results$=[];for(i$=0,len$=(ref$=node).length;i$<len$;++i$){element=ref$[i$];results$.push(typesCast(element,typeOf,options));}return results$;}()};}function castTuple(node,type,options){var result,i,i$,ref$,len$,types,cast;if(toString$.call(node).slice(8,-1)!=='Array'){return{type:'Nothing'};}result=[];i=0;for(i$=0,len$=(ref$=type.of).length;i$<len$;++i$){types=ref$[i$];cast=typesCast(node[i],types,options);if(toString$.call(cast).slice(8,-1)!=='Undefined'){result.push(cast);}i++;}if(node.length<=i){return{type:'Just',value:result};}else{return{type:'Nothing'};}}function castFields(node,type,options){var typeOf,key,value;if(toString$.call(node).slice(8,-1)!=='Object'){return{type:'Nothing'};}typeOf=type.of;return{type:'Just',value:function(){var ref$,resultObj$={};for(key in ref$=node){value=ref$[key];resultObj$[typesCast(key,[{type:'String'}],options)]=typesCast(value,typeOf[key]||[{type:'*'}],options);}return resultObj$;}()};}function typeCast(node,typeObj,options){var type,structure,castFunc,ref$;type=typeObj.type,structure=typeObj.structure;if(type){castFunc=((ref$=options.customTypes[type])!=null?ref$.cast:void 8)||types[type];if(!castFunc){throw new Error(\"Type not defined: \"+type+\".\");}return castFunc(node,options,typesCast);}else{switch(structure){case'array':return castArray(node,typeObj,options);case'tuple':return castTuple(node,typeObj,options);case'fields':return castFields(node,typeObj,options);}}}function typesCast(node,types,options){var i$,len$,type,ref$,valueType,value;for(i$=0,len$=types.length;i$<len$;++i$){type=types[i$];ref$=typeCast(node,type,options),valueType=ref$.type,value=ref$.value;if(valueType==='Nothing'){continue;}if(parsedTypeCheck([type],value,{customTypes:options.customTypes})){return value;}}throw new Error(\"Value \"+(0,_stringify4.default)(node)+\" does not type check against \"+(0,_stringify4.default)(types)+\".\");}module.exports=typesCast;}).call(this);},{\"type-check\":598}],418:[function(require,module,exports){// Generated by LiveScript 1.4.0\n(function(){var parseString,cast,parseType,VERSION,parsedTypeParse,parse;parseString=require(\"./parse-string\");cast=require(\"./cast\");parseType=require(\"type-check\").parseType;VERSION='0.3.0';parsedTypeParse=function parsedTypeParse(parsedType,string,options){options==null&&(options={});options.explicit==null&&(options.explicit=false);options.customTypes==null&&(options.customTypes={});return cast(parseString(parsedType,string,options),parsedType,options);};parse=function parse(type,string,options){return parsedTypeParse(parseType(type),string,options);};module.exports={VERSION:VERSION,parse:parse,parsedTypeParse:parsedTypeParse};}).call(this);},{\"./cast\":417,\"./parse-string\":419,\"type-check\":598}],419:[function(require,module,exports){// Generated by LiveScript 1.4.0\n(function(){var reject,special,tokenRegex;reject=require(\"prelude-ls\").reject;function consumeOp(tokens,op){if(tokens[0]===op){return tokens.shift();}else{throw new Error(\"Expected '\"+op+\"', but got '\"+tokens[0]+\"' instead in \"+(0,_stringify4.default)(tokens)+\".\");}}function maybeConsumeOp(tokens,op){if(tokens[0]===op){return tokens.shift();}}function consumeList(tokens,arg$,hasDelimiters){var open,close,result,untilTest;open=arg$[0],close=arg$[1];if(hasDelimiters){consumeOp(tokens,open);}result=[];untilTest=\",\"+(hasDelimiters?close:'');while(tokens.length&&hasDelimiters&&tokens[0]!==close){result.push(consumeElement(tokens,untilTest));maybeConsumeOp(tokens,',');}if(hasDelimiters){consumeOp(tokens,close);}return result;}function consumeArray(tokens,hasDelimiters){return consumeList(tokens,['[',']'],hasDelimiters);}function consumeTuple(tokens,hasDelimiters){return consumeList(tokens,['(',')'],hasDelimiters);}function consumeFields(tokens,hasDelimiters){var result,untilTest,key;if(hasDelimiters){consumeOp(tokens,'{');}result={};untilTest=\",\"+(hasDelimiters?'}':'');while(tokens.length&&(!hasDelimiters||tokens[0]!=='}')){key=consumeValue(tokens,':');consumeOp(tokens,':');result[key]=consumeElement(tokens,untilTest);maybeConsumeOp(tokens,',');}if(hasDelimiters){consumeOp(tokens,'}');}return result;}function consumeValue(tokens,untilTest){var out;untilTest==null&&(untilTest='');out='';while(tokens.length&&-1===untilTest.indexOf(tokens[0])){out+=tokens.shift();}return out;}function consumeElement(tokens,untilTest){switch(tokens[0]){case'[':return consumeArray(tokens,true);case'(':return consumeTuple(tokens,true);case'{':return consumeFields(tokens,true);default:return consumeValue(tokens,untilTest);}}function consumeTopLevel(tokens,types,options){var ref$,type,structure,origTokens,result,finalResult,x$,y$;ref$=types[0],type=ref$.type,structure=ref$.structure;origTokens=tokens.concat();if(!options.explicit&&types.length===1&&(!type&&structure||type==='Array'||type==='Object')){result=structure==='array'||type==='Array'?consumeArray(tokens,tokens[0]==='['):structure==='tuple'?consumeTuple(tokens,tokens[0]==='('):consumeFields(tokens,tokens[0]==='{');finalResult=tokens.length?consumeElement(structure==='array'||type==='Array'?(x$=origTokens,x$.unshift('['),x$.push(']'),x$):(y$=origTokens,y$.unshift('('),y$.push(')'),y$)):result;}else{finalResult=consumeElement(tokens);}return finalResult;}special=/\\[\\]\\(\\)}{:,/.source;tokenRegex=RegExp('(\"(?:\\\\\\\\\"|[^\"])*\")|(\\'(?:\\\\\\\\\\'|[^\\'])*\\')|(/(?:\\\\\\\\/|[^/])*/[a-zA-Z]*)|(#.*#)|(['+special+'])|([^\\\\s'+special+'](?:\\\\s*[^\\\\s'+special+']+)*)|\\\\s*');module.exports=function(types,string,options){var tokens,node;options==null&&(options={});if(!options.explicit&&types.length===1&&types[0].type==='String'){return\"'\"+string.replace(/\\\\'/g,\"\\\\\\\\'\")+\"'\";}tokens=reject(not$,string.split(tokenRegex));node=consumeTopLevel(tokens,types,options);if(!node){throw new Error(\"Error parsing '\"+string+\"'.\");}return node;};function not$(x){return!x;}}).call(this);},{\"prelude-ls\":593}],420:[function(require,module,exports){(function(global){/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n *//** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** Used as the `TypeError` message for \"Functions\" methods. */var FUNC_ERROR_TEXT='Expected a function';/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used to compose bitmasks for comparison styles. */var UNORDERED_COMPARE_FLAG=1,PARTIAL_COMPARE_FLAG=2;/** Used as references for various `Number` constants. */var INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991;/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',boolTag='[object Boolean]',dateTag='[object Date]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',objectTag='[object Object]',promiseTag='[object Promise]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',weakMapTag='[object WeakMap]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to match property names within property paths. */var reIsDeepProp=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,reIsPlainProp=/^\\w*$/,reLeadingDot=/^\\./,rePropName=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */var reRegExpChar=/[\\\\^$.*+?()[\\]{}|]/g;/** Used to match backslashes in property paths. */var reEscapeChar=/\\\\(\\\\)?/g;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\\[object .+?Constructor\\]$/;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\\d*)$/;/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/** Detect free variable `global` from Node.js. */var freeGlobal=(typeof global===\"undefined\"?\"undefined\":(0,_typeof6.default)(global))=='object'&&global&&global.Object===Object&&global;/** Detect free variable `self`. */var freeSelf=(typeof self===\"undefined\"?\"undefined\":(0,_typeof6.default)(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Detect free variable `exports`. */var freeExports=(typeof exports===\"undefined\"?\"undefined\":(0,_typeof6.default)(exports))=='object'&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&(typeof module===\"undefined\"?\"undefined\":(0,_typeof6.default)(module))=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{return freeProcess&&freeProcess.binding('util');}catch(e){}}();/* Node.js helper references. */var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */function arrayPush(array,values){var index=-1,length=values.length,offset=array.length;while(++index<length){array[offset+index]=values[index];}return array;}/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */function arraySome(array,predicate){var index=-1,length=array?array.length:0;while(++index<length){if(predicate(array[index],index,array)){return true;}}return false;}/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */function baseProperty(key){return function(object){return object==null?undefined:object[key];};}/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index);}return result;}/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */function baseUnary(func){return function(value){return func(value);};}/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */function getValue(object,key){return object==null?undefined:object[key];}/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */function isHostObject(value){// Many host objects are `Object` objects that can coerce to strings\n// despite having improperly defined `toString` methods.\nvar result=false;if(value!=null&&typeof value.toString!='function'){try{result=!!(value+'');}catch(e){}}return result;}/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */function overArg(func,transform){return function(arg){return func(transform(arg));};}/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}/** Used for built-in method references. */var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;/** Used to detect overreaching core-js shims. */var coreJsData=root['__core-js_shared__'];/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */var objectToString=objectProto.toString;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,'$1.*?')+'$');/** Built-in value references. */var _Symbol8=root.Symbol,Uint8Array=root.Uint8Array,getPrototype=overArg(_getPrototypeOf2.default,Object),propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeGetSymbols=_getOwnPropertySymbols4.default,nativeKeys=overArg(_keys4.default,Object);/* Built-in method references that are verified to be native. */var DataView=getNative(root,'DataView'),Map=getNative(root,'Map'),Promise=getNative(root,'Promise'),Set=getNative(root,'Set'),WeakMap=getNative(root,'WeakMap'),nativeCreate=getNative(Object,'create');/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol8?_Symbol8.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */function Hash(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};}/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */function hashDelete(key){return this.has(key)&&delete this.__data__[key];}/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}return hasOwnProperty.call(data,key)?data[key]:undefined;}/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */function hashSet(key,value){var data=this.__data__;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}// Add methods to `Hash`.\nHash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */function ListCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */function listCacheClear(){this.__data__=[];}/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}return true;}/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){data.push([key,value]);}else{data[index][1]=value;}return this;}// Add methods to `ListCache`.\nListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */function MapCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */function mapCacheClear(){this.__data__={'hash':new Hash(),'map':new(Map||ListCache)(),'string':new Hash()};}/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */function mapCacheDelete(key){return getMapData(this,key)['delete'](key);}/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */function mapCacheGet(key){return getMapData(this,key).get(key);}/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function mapCacheHas(key){return getMapData(this,key).has(key);}/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */function mapCacheSet(key,value){getMapData(this,key).set(key,value);return this;}// Add methods to `MapCache`.\nMapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */function SetCache(values){var index=-1,length=values?values.length:0;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */function setCacheHas(value){return this.__data__.has(value);}// Add methods to `SetCache`.\nSetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */function Stack(entries){this.__data__=new ListCache(entries);}/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */function stackClear(){this.__data__=new ListCache();}/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */function stackDelete(key){return this.__data__['delete'](key);}/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */function stackGet(key){return this.__data__.get(key);}/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function stackHas(key){return this.__data__.has(key);}/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */function stackSet(key,value){var cache=this.__data__;if(cache instanceof ListCache){var pairs=cache.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);return this;}cache=this.__data__=new MapCache(pairs);}cache.set(key,value);return this;}// Add methods to `Stack`.\nStack.prototype.clear=stackClear;Stack.prototype['delete']=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */function arrayLikeKeys(value,inherited){// Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n// Safari 9 makes `arguments.length` enumerable in strict mode.\nvar result=isArray(value)||isArguments(value)?baseTimes(value.length,String):[];var length=result.length,skipIndexes=!!length;for(var key in value){if((inherited||hasOwnProperty.call(value,key))&&!(skipIndexes&&(key=='length'||isIndex(key,length)))){result.push(key);}}return result;}/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}return-1;}/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */function baseGet(object,path){path=isKey(path,object)?[path]:castPath(path);var index=0,length=path.length;while(object!=null&&index<length){object=object[toKey(path[index++])];}return index&&index==length?object:undefined;}/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */function baseGetAllKeys(object,keysFunc,symbolsFunc){var result=keysFunc(object);return isArray(object)?result:arrayPush(result,symbolsFunc(object));}/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */function baseGetTag(value){return objectToString.call(value);}/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */function baseHasIn(object,key){return object!=null&&key in Object(object);}/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n *  The bitmask may be composed of the following flags:\n *     1 - Unordered comparison\n *     2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */function baseIsEqual(value,other,customizer,bitmask,stack){if(value===other){return true;}if(value==null||other==null||!isObject(value)&&!isObjectLike(other)){return value!==value&&other!==other;}return baseIsEqualDeep(value,other,baseIsEqual,customizer,bitmask,stack);}/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */function baseIsEqualDeep(object,other,equalFunc,customizer,bitmask,stack){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=arrayTag,othTag=arrayTag;if(!objIsArr){objTag=getTag(object);objTag=objTag==argsTag?objectTag:objTag;}if(!othIsArr){othTag=getTag(other);othTag=othTag==argsTag?objectTag:othTag;}var objIsObj=objTag==objectTag&&!isHostObject(object),othIsObj=othTag==objectTag&&!isHostObject(other),isSameTag=objTag==othTag;if(isSameTag&&!objIsObj){stack||(stack=new Stack());return objIsArr||isTypedArray(object)?equalArrays(object,other,equalFunc,customizer,bitmask,stack):equalByTag(object,other,objTag,equalFunc,customizer,bitmask,stack);}if(!(bitmask&PARTIAL_COMPARE_FLAG)){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,'__wrapped__'),othIsWrapped=othIsObj&&hasOwnProperty.call(other,'__wrapped__');if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object.value():object,othUnwrapped=othIsWrapped?other.value():other;stack||(stack=new Stack());return equalFunc(objUnwrapped,othUnwrapped,customizer,bitmask,stack);}}if(!isSameTag){return false;}stack||(stack=new Stack());return equalObjects(object,other,equalFunc,customizer,bitmask,stack);}/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */function baseIsMatch(object,source,matchData,customizer){var index=matchData.length,length=index,noCustomizer=!customizer;if(object==null){return!length;}object=Object(object);while(index--){var data=matchData[index];if(noCustomizer&&data[2]?data[1]!==object[data[0]]:!(data[0]in object)){return false;}}while(++index<length){data=matchData[index];var key=data[0],objValue=object[key],srcValue=data[1];if(noCustomizer&&data[2]){if(objValue===undefined&&!(key in object)){return false;}}else{var stack=new Stack();if(customizer){var result=customizer(objValue,srcValue,key,object,source,stack);}if(!(result===undefined?baseIsEqual(srcValue,objValue,customizer,UNORDERED_COMPARE_FLAG|PARTIAL_COMPARE_FLAG,stack):result)){return false;}}}return true;}/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}var pattern=isFunction(value)||isHostObject(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objectToString.call(value)];}/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */function baseIteratee(value){// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n// See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\nif(typeof value=='function'){return value;}if(value==null){return identity;}if((typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))=='object'){return isArray(value)?baseMatchesProperty(value[0],value[1]):baseMatches(value);}return property(value);}/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */function baseKeys(object){if(!isPrototype(object)){return nativeKeys(object);}var result=[];for(var key in Object(object)){if(hasOwnProperty.call(object,key)&&key!='constructor'){result.push(key);}}return result;}/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */function baseKeysIn(object){if(!isObject(object)){return nativeKeysIn(object);}var isProto=isPrototype(object),result=[];for(var key in object){if(!(key=='constructor'&&(isProto||!hasOwnProperty.call(object,key)))){result.push(key);}}return result;}/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */function baseMatches(source){var matchData=getMatchData(source);if(matchData.length==1&&matchData[0][2]){return matchesStrictComparable(matchData[0][0],matchData[0][1]);}return function(object){return object===source||baseIsMatch(object,source,matchData);};}/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */function baseMatchesProperty(path,srcValue){if(isKey(path)&&isStrictComparable(srcValue)){return matchesStrictComparable(toKey(path),srcValue);}return function(object){var objValue=get(object,path);return objValue===undefined&&objValue===srcValue?hasIn(object,path):baseIsEqual(srcValue,objValue,undefined,UNORDERED_COMPARE_FLAG|PARTIAL_COMPARE_FLAG);};}/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick from.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */function basePickBy(object,props,predicate){var index=-1,length=props.length,result={};while(++index<length){var key=props[index],value=object[key];if(predicate(value,key)){result[key]=value;}}return result;}/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */function basePropertyDeep(path){return function(object){return baseGet(object,path);};}/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */function baseToString(value){// Exit early for strings to avoid a performance hit in some environments.\nif(typeof value=='string'){return value;}if(isSymbol(value)){return symbolToString?symbolToString.call(value):'';}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */function castPath(value){return isArray(value)?value:stringToPath(value);}/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */function equalArrays(array,other,equalFunc,customizer,bitmask,stack){var isPartial=bitmask&PARTIAL_COMPARE_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false;}// Assume cyclic values are equal.\nvar stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other;}var index=-1,result=true,seen=bitmask&UNORDERED_COMPARE_FLAG?new SetCache():undefined;stack.set(array,other);stack.set(other,array);// Ignore non-index properties.\nwhile(++index<arrLength){var arrValue=array[index],othValue=other[index];if(customizer){var compared=isPartial?customizer(othValue,arrValue,index,other,array,stack):customizer(arrValue,othValue,index,array,other,stack);}if(compared!==undefined){if(compared){continue;}result=false;break;}// Recursively compare arrays (susceptible to call stack limits).\nif(seen){if(!arraySome(other,function(othValue,othIndex){if(!seen.has(othIndex)&&(arrValue===othValue||equalFunc(arrValue,othValue,customizer,bitmask,stack))){return seen.add(othIndex);}})){result=false;break;}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,customizer,bitmask,stack))){result=false;break;}}stack['delete'](array);stack['delete'](other);return result;}/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */function equalByTag(object,other,tag,equalFunc,customizer,bitmask,stack){switch(tag){case dataViewTag:if(object.byteLength!=other.byteLength||object.byteOffset!=other.byteOffset){return false;}object=object.buffer;other=other.buffer;case arrayBufferTag:if(object.byteLength!=other.byteLength||!equalFunc(new Uint8Array(object),new Uint8Array(other))){return false;}return true;case boolTag:case dateTag:case numberTag:// Coerce booleans to `1` or `0` and dates to milliseconds.\n// Invalid dates are coerced to `NaN`.\nreturn eq(+object,+other);case errorTag:return object.name==other.name&&object.message==other.message;case regexpTag:case stringTag:// Coerce regexes to strings and treat strings, primitives and objects,\n// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n// for more details.\nreturn object==other+'';case mapTag:var convert=mapToArray;case setTag:var isPartial=bitmask&PARTIAL_COMPARE_FLAG;convert||(convert=setToArray);if(object.size!=other.size&&!isPartial){return false;}// Assume cyclic values are equal.\nvar stacked=stack.get(object);if(stacked){return stacked==other;}bitmask|=UNORDERED_COMPARE_FLAG;// Recursively compare objects (susceptible to call stack limits).\nstack.set(object,other);var result=equalArrays(convert(object),convert(other),equalFunc,customizer,bitmask,stack);stack['delete'](object);return result;case symbolTag:if(symbolValueOf){return symbolValueOf.call(object)==symbolValueOf.call(other);}}return false;}/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */function equalObjects(object,other,equalFunc,customizer,bitmask,stack){var isPartial=bitmask&PARTIAL_COMPARE_FLAG,objProps=keys(object),objLength=objProps.length,othProps=keys(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial){return false;}var index=objLength;while(index--){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty.call(other,key))){return false;}}// Assume cyclic values are equal.\nvar stacked=stack.get(object);if(stacked&&stack.get(other)){return stacked==other;}var result=true;stack.set(object,other);stack.set(other,object);var skipCtor=isPartial;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key];if(customizer){var compared=isPartial?customizer(othValue,objValue,key,other,object,stack):customizer(objValue,othValue,key,object,other,stack);}// Recursively compare objects (susceptible to call stack limits).\nif(!(compared===undefined?objValue===othValue||equalFunc(objValue,othValue,customizer,bitmask,stack):compared)){result=false;break;}skipCtor||(skipCtor=key=='constructor');}if(result&&!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;// Non `Object` object instances with different constructors are not equal.\nif(objCtor!=othCtor&&'constructor'in object&&'constructor'in other&&!(typeof objCtor=='function'&&objCtor instanceof objCtor&&typeof othCtor=='function'&&othCtor instanceof othCtor)){result=false;}}stack['delete'](object);stack['delete'](other);return result;}/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */function getAllKeysIn(object){return baseGetAllKeys(object,keysIn,getSymbolsIn);}/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=='string'?'string':'hash']:data.map;}/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */function getMatchData(object){var result=keys(object),length=result.length;while(length--){var key=result[length],value=object[key];result[length]=[key,value,isStrictComparable(value)];}return result;}/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */var getSymbols=nativeGetSymbols?overArg(nativeGetSymbols,Object):stubArray;/**\n * Creates an array of the own and inherited enumerable symbol properties\n * of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */var getSymbolsIn=!nativeGetSymbols?stubArray:function(object){var result=[];while(object){arrayPush(result,getSymbols(object));object=getPrototype(object);}return result;};/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */var getTag=baseGetTag;// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map())!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set())!=setTag||WeakMap&&getTag(new WeakMap())!=weakMapTag){getTag=function getTag(value){var result=objectToString.call(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):undefined;if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag;}}return result;};}/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */function hasPath(object,path,hasFunc){path=isKey(path,object)?[path]:castPath(path);var result,index=-1,length=path.length;while(++index<length){var key=toKey(path[index]);if(!(result=object!=null&&hasFunc(object,key))){break;}object=object[key];}if(result){return result;}var length=object?object.length:0;return!!length&&isLength(length)&&isIndex(key,length)&&(isArray(object)||isArguments(object));}/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */function isIndex(value,length){length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(typeof value=='number'||reIsUint.test(value))&&value>-1&&value%1==0&&value<length;}/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */function isKey(value,object){if(isArray(value)){return false;}var type=typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value);if(type=='number'||type=='symbol'||type=='boolean'||value==null||isSymbol(value)){return true;}return reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object!=null&&value in Object(object);}/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */function isKeyable(value){var type=typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value);return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor=='function'&&Ctor.prototype||objectProto;return value===proto;}/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */function isStrictComparable(value){return value===value&&!isObject(value);}/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */function matchesStrictComparable(key,srcValue){return function(object){if(object==null){return false;}return object[key]===srcValue&&(srcValue!==undefined||key in Object(object));};}/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */function nativeKeysIn(object){var result=[];if(object!=null){for(var key in Object(object)){result.push(key);}}return result;}/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */var stringToPath=memoize(function(string){string=toString(string);var result=[];if(reLeadingDot.test(string)){result.push('');}string.replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,'$1'):number||match);});return result;});/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */function toKey(value){if(typeof value=='string'||isSymbol(value)){return value;}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}try{return func+'';}catch(e){}}return'';}/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */function memoize(func,resolver){if(typeof func!='function'||resolver&&typeof resolver!='function'){throw new TypeError(FUNC_ERROR_TEXT);}var memoized=function memoized(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key);}var result=func.apply(this,args);memoized.cache=cache.set(key,result);return result;};memoized.cache=new(memoize.Cache||MapCache)();return memoized;}// Assign cache to `_.memoize`.\nmemoize.Cache=MapCache;/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */function eq(value,other){return value===other||value!==value&&other!==other;}/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */function isArguments(value){// Safari 8.1 makes `arguments.callee` enumerable in strict mode.\nreturn isArrayLikeObject(value)&&hasOwnProperty.call(value,'callee')&&(!propertyIsEnumerable.call(value,'callee')||objectToString.call(value)==argsTag);}/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */var isArray=Array.isArray;/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value);}/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */function isFunction(value){// The use of `Object#toString` avoids issues with the `typeof` operator\n// in Safari 8-9 which returns 'object' for typed array and other constructors.\nvar tag=isObject(value)?objectToString.call(value):'';return tag==funcTag||tag==genTag;}/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */function isObject(value){var type=typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value);return!!value&&(type=='object'||type=='function');}/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */function isObjectLike(value){return!!value&&(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))=='object';}/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */function isSymbol(value){return(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))=='symbol'||isObjectLike(value)&&objectToString.call(value)==symbolTag;}/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */function toString(value){return value==null?'':baseToString(value);}/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */function get(object,path,defaultValue){var result=object==null?undefined:baseGet(object,path);return result===undefined?defaultValue:result;}/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */function hasIn(object,path){return object!=null&&hasPath(object,path,baseHasIn);}/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */function keysIn(object){return isArrayLike(object)?arrayLikeKeys(object,true):baseKeysIn(object);}/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */function pickBy(object,predicate){return object==null?{}:basePickBy(object,getAllKeysIn(object),baseIteratee(predicate));}/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */function identity(value){return value;}/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path);}/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */function stubArray(){return[];}module.exports=pickBy;}).call(this,typeof global!==\"undefined\"?global:typeof self!==\"undefined\"?self:typeof window!==\"undefined\"?window:{});},{}],421:[function(require,module,exports){var getNative=require(\"./_getNative\"),root=require(\"./_root\");/* Built-in method references that are verified to be native. */var DataView=getNative(root,'DataView');module.exports=DataView;},{\"./_getNative\":492,\"./_root\":530}],422:[function(require,module,exports){var hashClear=require(\"./_hashClear\"),hashDelete=require(\"./_hashDelete\"),hashGet=require(\"./_hashGet\"),hashHas=require(\"./_hashHas\"),hashSet=require(\"./_hashSet\");/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */function Hash(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}// Add methods to `Hash`.\nHash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;module.exports=Hash;},{\"./_hashClear\":499,\"./_hashDelete\":500,\"./_hashGet\":501,\"./_hashHas\":502,\"./_hashSet\":503}],423:[function(require,module,exports){var listCacheClear=require(\"./_listCacheClear\"),listCacheDelete=require(\"./_listCacheDelete\"),listCacheGet=require(\"./_listCacheGet\"),listCacheHas=require(\"./_listCacheHas\"),listCacheSet=require(\"./_listCacheSet\");/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */function ListCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}// Add methods to `ListCache`.\nListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;module.exports=ListCache;},{\"./_listCacheClear\":512,\"./_listCacheDelete\":513,\"./_listCacheGet\":514,\"./_listCacheHas\":515,\"./_listCacheSet\":516}],424:[function(require,module,exports){var getNative=require(\"./_getNative\"),root=require(\"./_root\");/* Built-in method references that are verified to be native. */var Map=getNative(root,'Map');module.exports=Map;},{\"./_getNative\":492,\"./_root\":530}],425:[function(require,module,exports){var mapCacheClear=require(\"./_mapCacheClear\"),mapCacheDelete=require(\"./_mapCacheDelete\"),mapCacheGet=require(\"./_mapCacheGet\"),mapCacheHas=require(\"./_mapCacheHas\"),mapCacheSet=require(\"./_mapCacheSet\");/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */function MapCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}// Add methods to `MapCache`.\nMapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;module.exports=MapCache;},{\"./_mapCacheClear\":517,\"./_mapCacheDelete\":518,\"./_mapCacheGet\":519,\"./_mapCacheHas\":520,\"./_mapCacheSet\":521}],426:[function(require,module,exports){var getNative=require(\"./_getNative\"),root=require(\"./_root\");/* Built-in method references that are verified to be native. */var Promise=getNative(root,'Promise');module.exports=Promise;},{\"./_getNative\":492,\"./_root\":530}],427:[function(require,module,exports){var getNative=require(\"./_getNative\"),root=require(\"./_root\");/* Built-in method references that are verified to be native. */var Set=getNative(root,'Set');module.exports=Set;},{\"./_getNative\":492,\"./_root\":530}],428:[function(require,module,exports){var MapCache=require(\"./_MapCache\"),setCacheAdd=require(\"./_setCacheAdd\"),setCacheHas=require(\"./_setCacheHas\");/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */function SetCache(values){var index=-1,length=values==null?0:values.length;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}// Add methods to `SetCache`.\nSetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;module.exports=SetCache;},{\"./_MapCache\":425,\"./_setCacheAdd\":531,\"./_setCacheHas\":532}],429:[function(require,module,exports){var ListCache=require(\"./_ListCache\"),stackClear=require(\"./_stackClear\"),stackDelete=require(\"./_stackDelete\"),stackGet=require(\"./_stackGet\"),stackHas=require(\"./_stackHas\"),stackSet=require(\"./_stackSet\");/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */function Stack(entries){var data=this.__data__=new ListCache(entries);this.size=data.size;}// Add methods to `Stack`.\nStack.prototype.clear=stackClear;Stack.prototype['delete']=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;module.exports=Stack;},{\"./_ListCache\":423,\"./_stackClear\":536,\"./_stackDelete\":537,\"./_stackGet\":538,\"./_stackHas\":539,\"./_stackSet\":540}],430:[function(require,module,exports){var root=require(\"./_root\");/** Built-in value references. */var _Symbol9=root.Symbol;module.exports=_Symbol9;},{\"./_root\":530}],431:[function(require,module,exports){var root=require(\"./_root\");/** Built-in value references. */var Uint8Array=root.Uint8Array;module.exports=Uint8Array;},{\"./_root\":530}],432:[function(require,module,exports){var getNative=require(\"./_getNative\"),root=require(\"./_root\");/* Built-in method references that are verified to be native. */var WeakMap=getNative(root,'WeakMap');module.exports=WeakMap;},{\"./_getNative\":492,\"./_root\":530}],433:[function(require,module,exports){/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */function addMapEntry(map,pair){// Don't return `map.set` because it's not chainable in IE 11.\nmap.set(pair[0],pair[1]);return map;}module.exports=addMapEntry;},{}],434:[function(require,module,exports){/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */function addSetEntry(set,value){// Don't return `set.add` because it's not chainable in IE 11.\nset.add(value);return set;}module.exports=addSetEntry;},{}],435:[function(require,module,exports){/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */function apply(func,thisArg,args){switch(args.length){case 0:return func.call(thisArg);case 1:return func.call(thisArg,args[0]);case 2:return func.call(thisArg,args[0],args[1]);case 3:return func.call(thisArg,args[0],args[1],args[2]);}return func.apply(thisArg,args);}module.exports=apply;},{}],436:[function(require,module,exports){/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */function arrayEach(array,iteratee){var index=-1,length=array==null?0:array.length;while(++index<length){if(iteratee(array[index],index,array)===false){break;}}return array;}module.exports=arrayEach;},{}],437:[function(require,module,exports){/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */function arrayFilter(array,predicate){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(predicate(value,index,array)){result[resIndex++]=value;}}return result;}module.exports=arrayFilter;},{}],438:[function(require,module,exports){var baseIndexOf=require(\"./_baseIndexOf\");/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */function arrayIncludes(array,value){var length=array==null?0:array.length;return!!length&&baseIndexOf(array,value,0)>-1;}module.exports=arrayIncludes;},{\"./_baseIndexOf\":454}],439:[function(require,module,exports){/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */function arrayIncludesWith(array,value,comparator){var index=-1,length=array==null?0:array.length;while(++index<length){if(comparator(value,array[index])){return true;}}return false;}module.exports=arrayIncludesWith;},{}],440:[function(require,module,exports){var baseTimes=require(\"./_baseTimes\"),isArguments=require(\"./isArguments\"),isArray=require(\"./isArray\"),isBuffer=require(\"./isBuffer\"),isIndex=require(\"./_isIndex\"),isTypedArray=require(\"./isTypedArray\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */function arrayLikeKeys(value,inherited){var isArr=isArray(value),isArg=!isArr&&isArguments(value),isBuff=!isArr&&!isArg&&isBuffer(value),isType=!isArr&&!isArg&&!isBuff&&isTypedArray(value),skipIndexes=isArr||isArg||isBuff||isType,result=skipIndexes?baseTimes(value.length,String):[],length=result.length;for(var key in value){if((inherited||hasOwnProperty.call(value,key))&&!(skipIndexes&&(// Safari 9 has enumerable `arguments.length` in strict mode.\nkey=='length'||// Node.js 0.10 has enumerable non-index properties on buffers.\nisBuff&&(key=='offset'||key=='parent')||// PhantomJS 2 has enumerable non-index properties on typed arrays.\nisType&&(key=='buffer'||key=='byteLength'||key=='byteOffset')||// Skip index properties.\nisIndex(key,length)))){result.push(key);}}return result;}module.exports=arrayLikeKeys;},{\"./_baseTimes\":465,\"./_isIndex\":507,\"./isArguments\":551,\"./isArray\":552,\"./isBuffer\":554,\"./isTypedArray\":563}],441:[function(require,module,exports){/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */function arrayMap(array,iteratee){var index=-1,length=array==null?0:array.length,result=Array(length);while(++index<length){result[index]=iteratee(array[index],index,array);}return result;}module.exports=arrayMap;},{}],442:[function(require,module,exports){/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */function arrayPush(array,values){var index=-1,length=values.length,offset=array.length;while(++index<length){array[offset+index]=values[index];}return array;}module.exports=arrayPush;},{}],443:[function(require,module,exports){/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */function arrayReduce(array,iteratee,accumulator,initAccum){var index=-1,length=array==null?0:array.length;if(initAccum&&length){accumulator=array[++index];}while(++index<length){accumulator=iteratee(accumulator,array[index],index,array);}return accumulator;}module.exports=arrayReduce;},{}],444:[function(require,module,exports){var baseAssignValue=require(\"./_baseAssignValue\"),eq=require(\"./eq\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */function assignValue(object,key,value){var objValue=object[key];if(!(hasOwnProperty.call(object,key)&&eq(objValue,value))||value===undefined&&!(key in object)){baseAssignValue(object,key,value);}}module.exports=assignValue;},{\"./_baseAssignValue\":448,\"./eq\":548}],445:[function(require,module,exports){var eq=require(\"./eq\");/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}return-1;}module.exports=assocIndexOf;},{\"./eq\":548}],446:[function(require,module,exports){var copyObject=require(\"./_copyObject\"),keys=require(\"./keys\");/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */function baseAssign(object,source){return object&&copyObject(source,keys(source),object);}module.exports=baseAssign;},{\"./_copyObject\":480,\"./keys\":564}],447:[function(require,module,exports){var copyObject=require(\"./_copyObject\"),keysIn=require(\"./keysIn\");/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */function baseAssignIn(object,source){return object&&copyObject(source,keysIn(source),object);}module.exports=baseAssignIn;},{\"./_copyObject\":480,\"./keysIn\":565}],448:[function(require,module,exports){var defineProperty=require(\"./_defineProperty\");/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */function baseAssignValue(object,key,value){if(key=='__proto__'&&defineProperty){defineProperty(object,key,{'configurable':true,'enumerable':true,'value':value,'writable':true});}else{object[key]=value;}}module.exports=baseAssignValue;},{\"./_defineProperty\":487}],449:[function(require,module,exports){var Stack=require(\"./_Stack\"),arrayEach=require(\"./_arrayEach\"),assignValue=require(\"./_assignValue\"),baseAssign=require(\"./_baseAssign\"),baseAssignIn=require(\"./_baseAssignIn\"),cloneBuffer=require(\"./_cloneBuffer\"),copyArray=require(\"./_copyArray\"),copySymbols=require(\"./_copySymbols\"),copySymbolsIn=require(\"./_copySymbolsIn\"),getAllKeys=require(\"./_getAllKeys\"),getAllKeysIn=require(\"./_getAllKeysIn\"),getTag=require(\"./_getTag\"),initCloneArray=require(\"./_initCloneArray\"),initCloneByTag=require(\"./_initCloneByTag\"),initCloneObject=require(\"./_initCloneObject\"),isArray=require(\"./isArray\"),isBuffer=require(\"./isBuffer\"),isObject=require(\"./isObject\"),keys=require(\"./keys\");/** Used to compose bitmasks for cloning. */var CLONE_DEEP_FLAG=1,CLONE_FLAT_FLAG=2,CLONE_SYMBOLS_FLAG=4;/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',boolTag='[object Boolean]',dateTag='[object Date]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',objectTag='[object Object]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',weakMapTag='[object WeakMap]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to identify `toStringTag` values supported by `_.clone`. */var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[dataViewTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[mapTag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[setTag]=cloneableTags[stringTag]=cloneableTags[symbolTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=true;cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[weakMapTag]=false;/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */function baseClone(value,bitmask,customizer,key,object,stack){var result,isDeep=bitmask&CLONE_DEEP_FLAG,isFlat=bitmask&CLONE_FLAT_FLAG,isFull=bitmask&CLONE_SYMBOLS_FLAG;if(customizer){result=object?customizer(value,key,object,stack):customizer(value);}if(result!==undefined){return result;}if(!isObject(value)){return value;}var isArr=isArray(value);if(isArr){result=initCloneArray(value);if(!isDeep){return copyArray(value,result);}}else{var tag=getTag(value),isFunc=tag==funcTag||tag==genTag;if(isBuffer(value)){return cloneBuffer(value,isDeep);}if(tag==objectTag||tag==argsTag||isFunc&&!object){result=isFlat||isFunc?{}:initCloneObject(value);if(!isDeep){return isFlat?copySymbolsIn(value,baseAssignIn(result,value)):copySymbols(value,baseAssign(result,value));}}else{if(!cloneableTags[tag]){return object?value:{};}result=initCloneByTag(value,tag,baseClone,isDeep);}}// Check for circular references and return its corresponding clone.\nstack||(stack=new Stack());var stacked=stack.get(value);if(stacked){return stacked;}stack.set(value,result);var keysFunc=isFull?isFlat?getAllKeysIn:getAllKeys:isFlat?keysIn:keys;var props=isArr?undefined:keysFunc(value);arrayEach(props||value,function(subValue,key){if(props){key=subValue;subValue=value[key];}// Recursively populate clone (susceptible to call stack limits).\nassignValue(result,key,baseClone(subValue,bitmask,customizer,key,value,stack));});return result;}module.exports=baseClone;},{\"./_Stack\":429,\"./_arrayEach\":436,\"./_assignValue\":444,\"./_baseAssign\":446,\"./_baseAssignIn\":447,\"./_cloneBuffer\":472,\"./_copyArray\":479,\"./_copySymbols\":481,\"./_copySymbolsIn\":482,\"./_getAllKeys\":489,\"./_getAllKeysIn\":490,\"./_getTag\":497,\"./_initCloneArray\":504,\"./_initCloneByTag\":505,\"./_initCloneObject\":506,\"./isArray\":552,\"./isBuffer\":554,\"./isObject\":557,\"./keys\":564}],450:[function(require,module,exports){var isObject=require(\"./isObject\");/** Built-in value references. */var objectCreate=_create4.default;/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */var baseCreate=function(){function object(){}return function(proto){if(!isObject(proto)){return{};}if(objectCreate){return objectCreate(proto);}object.prototype=proto;var result=new object();object.prototype=undefined;return result;};}();module.exports=baseCreate;},{\"./isObject\":557}],451:[function(require,module,exports){/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */function baseFindIndex(array,predicate,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?1:-1);while(fromRight?index--:++index<length){if(predicate(array[index],index,array)){return index;}}return-1;}module.exports=baseFindIndex;},{}],452:[function(require,module,exports){var arrayPush=require(\"./_arrayPush\"),isArray=require(\"./isArray\");/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */function baseGetAllKeys(object,keysFunc,symbolsFunc){var result=keysFunc(object);return isArray(object)?result:arrayPush(result,symbolsFunc(object));}module.exports=baseGetAllKeys;},{\"./_arrayPush\":442,\"./isArray\":552}],453:[function(require,module,exports){var _Symbol10=require(\"./_Symbol\"),getRawTag=require(\"./_getRawTag\"),objectToString=require(\"./_objectToString\");/** `Object#toString` result references. */var nullTag='[object Null]',undefinedTag='[object Undefined]';/** Built-in value references. */var symToStringTag=_Symbol10?_Symbol10.toStringTag:undefined;/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */function baseGetTag(value){if(value==null){return value===undefined?undefinedTag:nullTag;}return symToStringTag&&symToStringTag in Object(value)?getRawTag(value):objectToString(value);}module.exports=baseGetTag;},{\"./_Symbol\":430,\"./_getRawTag\":494,\"./_objectToString\":527}],454:[function(require,module,exports){var baseFindIndex=require(\"./_baseFindIndex\"),baseIsNaN=require(\"./_baseIsNaN\"),strictIndexOf=require(\"./_strictIndexOf\");/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */function baseIndexOf(array,value,fromIndex){return value===value?strictIndexOf(array,value,fromIndex):baseFindIndex(array,baseIsNaN,fromIndex);}module.exports=baseIndexOf;},{\"./_baseFindIndex\":451,\"./_baseIsNaN\":456,\"./_strictIndexOf\":541}],455:[function(require,module,exports){var baseGetTag=require(\"./_baseGetTag\"),isObjectLike=require(\"./isObjectLike\");/** `Object#toString` result references. */var argsTag='[object Arguments]';/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */function baseIsArguments(value){return isObjectLike(value)&&baseGetTag(value)==argsTag;}module.exports=baseIsArguments;},{\"./_baseGetTag\":453,\"./isObjectLike\":558}],456:[function(require,module,exports){/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */function baseIsNaN(value){return value!==value;}module.exports=baseIsNaN;},{}],457:[function(require,module,exports){var isFunction=require(\"./isFunction\"),isMasked=require(\"./_isMasked\"),isObject=require(\"./isObject\"),toSource=require(\"./_toSource\");/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */var reRegExpChar=/[\\\\^$.*+?()[\\]{}|]/g;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\\[object .+?Constructor\\]$/;/** Used for built-in method references. */var funcProto=Function.prototype,objectProto=Object.prototype;/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,'$1.*?')+'$');/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}var pattern=isFunction(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}module.exports=baseIsNative;},{\"./_isMasked\":510,\"./_toSource\":542,\"./isFunction\":555,\"./isObject\":557}],458:[function(require,module,exports){var baseGetTag=require(\"./_baseGetTag\"),isObjectLike=require(\"./isObjectLike\");/** `Object#toString` result references. */var regexpTag='[object RegExp]';/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */function baseIsRegExp(value){return isObjectLike(value)&&baseGetTag(value)==regexpTag;}module.exports=baseIsRegExp;},{\"./_baseGetTag\":453,\"./isObjectLike\":558}],459:[function(require,module,exports){var baseGetTag=require(\"./_baseGetTag\"),isLength=require(\"./isLength\"),isObjectLike=require(\"./isObjectLike\");/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',boolTag='[object Boolean]',dateTag='[object Date]',errorTag='[object Error]',funcTag='[object Function]',mapTag='[object Map]',numberTag='[object Number]',objectTag='[object Object]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',weakMapTag='[object WeakMap]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[baseGetTag(value)];}module.exports=baseIsTypedArray;},{\"./_baseGetTag\":453,\"./isLength\":556,\"./isObjectLike\":558}],460:[function(require,module,exports){var isPrototype=require(\"./_isPrototype\"),nativeKeys=require(\"./_nativeKeys\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */function baseKeys(object){if(!isPrototype(object)){return nativeKeys(object);}var result=[];for(var key in Object(object)){if(hasOwnProperty.call(object,key)&&key!='constructor'){result.push(key);}}return result;}module.exports=baseKeys;},{\"./_isPrototype\":511,\"./_nativeKeys\":524}],461:[function(require,module,exports){var isObject=require(\"./isObject\"),isPrototype=require(\"./_isPrototype\"),nativeKeysIn=require(\"./_nativeKeysIn\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */function baseKeysIn(object){if(!isObject(object)){return nativeKeysIn(object);}var isProto=isPrototype(object),result=[];for(var key in object){if(!(key=='constructor'&&(isProto||!hasOwnProperty.call(object,key)))){result.push(key);}}return result;}module.exports=baseKeysIn;},{\"./_isPrototype\":511,\"./_nativeKeysIn\":525,\"./isObject\":557}],462:[function(require,module,exports){/** Used as references for various `Number` constants. */var MAX_SAFE_INTEGER=9007199254740991;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeFloor=Math.floor;/**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */function baseRepeat(string,n){var result='';if(!string||n<1||n>MAX_SAFE_INTEGER){return result;}// Leverage the exponentiation by squaring algorithm for a faster repeat.\n// See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\ndo{if(n%2){result+=string;}n=nativeFloor(n/2);if(n){string+=string;}}while(n);return result;}module.exports=baseRepeat;},{}],463:[function(require,module,exports){var identity=require(\"./identity\"),overRest=require(\"./_overRest\"),setToString=require(\"./_setToString\");/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */function baseRest(func,start){return setToString(overRest(func,start,identity),func+'');}module.exports=baseRest;},{\"./_overRest\":529,\"./_setToString\":534,\"./identity\":549}],464:[function(require,module,exports){var constant=require(\"./constant\"),defineProperty=require(\"./_defineProperty\"),identity=require(\"./identity\");/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */var baseSetToString=!defineProperty?identity:function(func,string){return defineProperty(func,'toString',{'configurable':true,'enumerable':false,'value':constant(string),'writable':true});};module.exports=baseSetToString;},{\"./_defineProperty\":487,\"./constant\":546,\"./identity\":549}],465:[function(require,module,exports){/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index);}return result;}module.exports=baseTimes;},{}],466:[function(require,module,exports){var _Symbol11=require(\"./_Symbol\"),arrayMap=require(\"./_arrayMap\"),isArray=require(\"./isArray\"),isSymbol=require(\"./isSymbol\");/** Used as references for various `Number` constants. */var INFINITY=1/0;/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol11?_Symbol11.prototype:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */function baseToString(value){// Exit early for strings to avoid a performance hit in some environments.\nif(typeof value=='string'){return value;}if(isArray(value)){// Recursively convert values (susceptible to call stack limits).\nreturn arrayMap(value,baseToString)+'';}if(isSymbol(value)){return symbolToString?symbolToString.call(value):'';}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}module.exports=baseToString;},{\"./_Symbol\":430,\"./_arrayMap\":441,\"./isArray\":552,\"./isSymbol\":562}],467:[function(require,module,exports){/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */function baseUnary(func){return function(value){return func(value);};}module.exports=baseUnary;},{}],468:[function(require,module,exports){var SetCache=require(\"./_SetCache\"),arrayIncludes=require(\"./_arrayIncludes\"),arrayIncludesWith=require(\"./_arrayIncludesWith\"),cacheHas=require(\"./_cacheHas\"),createSet=require(\"./_createSet\"),setToArray=require(\"./_setToArray\");/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */function baseUniq(array,iteratee,comparator){var index=-1,includes=arrayIncludes,length=array.length,isCommon=true,result=[],seen=result;if(comparator){isCommon=false;includes=arrayIncludesWith;}else if(length>=LARGE_ARRAY_SIZE){var set=iteratee?null:createSet(array);if(set){return setToArray(set);}isCommon=false;includes=cacheHas;seen=new SetCache();}else{seen=iteratee?[]:result;}outer:while(++index<length){var value=array[index],computed=iteratee?iteratee(value):value;value=comparator||value!==0?value:0;if(isCommon&&computed===computed){var seenIndex=seen.length;while(seenIndex--){if(seen[seenIndex]===computed){continue outer;}}if(iteratee){seen.push(computed);}result.push(value);}else if(!includes(seen,computed,comparator)){if(seen!==result){seen.push(computed);}result.push(value);}}return result;}module.exports=baseUniq;},{\"./_SetCache\":428,\"./_arrayIncludes\":438,\"./_arrayIncludesWith\":439,\"./_cacheHas\":470,\"./_createSet\":485,\"./_setToArray\":533}],469:[function(require,module,exports){var arrayMap=require(\"./_arrayMap\");/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */function baseValues(object,props){return arrayMap(props,function(key){return object[key];});}module.exports=baseValues;},{\"./_arrayMap\":441}],470:[function(require,module,exports){/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function cacheHas(cache,key){return cache.has(key);}module.exports=cacheHas;},{}],471:[function(require,module,exports){var Uint8Array=require(\"./_Uint8Array\");/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */function cloneArrayBuffer(arrayBuffer){var result=new arrayBuffer.constructor(arrayBuffer.byteLength);new Uint8Array(result).set(new Uint8Array(arrayBuffer));return result;}module.exports=cloneArrayBuffer;},{\"./_Uint8Array\":431}],472:[function(require,module,exports){var root=require(\"./_root\");/** Detect free variable `exports`. */var freeExports=(typeof exports===\"undefined\"?\"undefined\":(0,_typeof6.default)(exports))=='object'&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&(typeof module===\"undefined\"?\"undefined\":(0,_typeof6.default)(module))=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Built-in value references. */var Buffer=moduleExports?root.Buffer:undefined,allocUnsafe=Buffer?Buffer.allocUnsafe:undefined;/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */function cloneBuffer(buffer,isDeep){if(isDeep){return buffer.slice();}var length=buffer.length,result=allocUnsafe?allocUnsafe(length):new buffer.constructor(length);buffer.copy(result);return result;}module.exports=cloneBuffer;},{\"./_root\":530}],473:[function(require,module,exports){var cloneArrayBuffer=require(\"./_cloneArrayBuffer\");/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */function cloneDataView(dataView,isDeep){var buffer=isDeep?cloneArrayBuffer(dataView.buffer):dataView.buffer;return new dataView.constructor(buffer,dataView.byteOffset,dataView.byteLength);}module.exports=cloneDataView;},{\"./_cloneArrayBuffer\":471}],474:[function(require,module,exports){var addMapEntry=require(\"./_addMapEntry\"),arrayReduce=require(\"./_arrayReduce\"),mapToArray=require(\"./_mapToArray\");/** Used to compose bitmasks for cloning. */var CLONE_DEEP_FLAG=1;/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */function cloneMap(map,isDeep,cloneFunc){var array=isDeep?cloneFunc(mapToArray(map),CLONE_DEEP_FLAG):mapToArray(map);return arrayReduce(array,addMapEntry,new map.constructor());}module.exports=cloneMap;},{\"./_addMapEntry\":433,\"./_arrayReduce\":443,\"./_mapToArray\":522}],475:[function(require,module,exports){/** Used to match `RegExp` flags from their coerced string values. */var reFlags=/\\w*$/;/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */function cloneRegExp(regexp){var result=new regexp.constructor(regexp.source,reFlags.exec(regexp));result.lastIndex=regexp.lastIndex;return result;}module.exports=cloneRegExp;},{}],476:[function(require,module,exports){var addSetEntry=require(\"./_addSetEntry\"),arrayReduce=require(\"./_arrayReduce\"),setToArray=require(\"./_setToArray\");/** Used to compose bitmasks for cloning. */var CLONE_DEEP_FLAG=1;/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */function cloneSet(set,isDeep,cloneFunc){var array=isDeep?cloneFunc(setToArray(set),CLONE_DEEP_FLAG):setToArray(set);return arrayReduce(array,addSetEntry,new set.constructor());}module.exports=cloneSet;},{\"./_addSetEntry\":434,\"./_arrayReduce\":443,\"./_setToArray\":533}],477:[function(require,module,exports){var _Symbol12=require(\"./_Symbol\");/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol12?_Symbol12.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined;/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */function cloneSymbol(symbol){return symbolValueOf?Object(symbolValueOf.call(symbol)):{};}module.exports=cloneSymbol;},{\"./_Symbol\":430}],478:[function(require,module,exports){var cloneArrayBuffer=require(\"./_cloneArrayBuffer\");/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */function cloneTypedArray(typedArray,isDeep){var buffer=isDeep?cloneArrayBuffer(typedArray.buffer):typedArray.buffer;return new typedArray.constructor(buffer,typedArray.byteOffset,typedArray.length);}module.exports=cloneTypedArray;},{\"./_cloneArrayBuffer\":471}],479:[function(require,module,exports){/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */function copyArray(source,array){var index=-1,length=source.length;array||(array=Array(length));while(++index<length){array[index]=source[index];}return array;}module.exports=copyArray;},{}],480:[function(require,module,exports){var assignValue=require(\"./_assignValue\"),baseAssignValue=require(\"./_baseAssignValue\");/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */function copyObject(source,props,object,customizer){var isNew=!object;object||(object={});var index=-1,length=props.length;while(++index<length){var key=props[index];var newValue=customizer?customizer(object[key],source[key],key,object,source):undefined;if(newValue===undefined){newValue=source[key];}if(isNew){baseAssignValue(object,key,newValue);}else{assignValue(object,key,newValue);}}return object;}module.exports=copyObject;},{\"./_assignValue\":444,\"./_baseAssignValue\":448}],481:[function(require,module,exports){var copyObject=require(\"./_copyObject\"),getSymbols=require(\"./_getSymbols\");/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */function copySymbols(source,object){return copyObject(source,getSymbols(source),object);}module.exports=copySymbols;},{\"./_copyObject\":480,\"./_getSymbols\":495}],482:[function(require,module,exports){var copyObject=require(\"./_copyObject\"),getSymbolsIn=require(\"./_getSymbolsIn\");/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */function copySymbolsIn(source,object){return copyObject(source,getSymbolsIn(source),object);}module.exports=copySymbolsIn;},{\"./_copyObject\":480,\"./_getSymbolsIn\":496}],483:[function(require,module,exports){var root=require(\"./_root\");/** Used to detect overreaching core-js shims. */var coreJsData=root['__core-js_shared__'];module.exports=coreJsData;},{\"./_root\":530}],484:[function(require,module,exports){var baseRest=require(\"./_baseRest\"),isIterateeCall=require(\"./_isIterateeCall\");/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */function createAssigner(assigner){return baseRest(function(object,sources){var index=-1,length=sources.length,customizer=length>1?sources[length-1]:undefined,guard=length>2?sources[2]:undefined;customizer=assigner.length>3&&typeof customizer=='function'?(length--,customizer):undefined;if(guard&&isIterateeCall(sources[0],sources[1],guard)){customizer=length<3?undefined:customizer;length=1;}object=Object(object);while(++index<length){var source=sources[index];if(source){assigner(object,source,index,customizer);}}return object;});}module.exports=createAssigner;},{\"./_baseRest\":463,\"./_isIterateeCall\":508}],485:[function(require,module,exports){var Set=require(\"./_Set\"),noop=require(\"./noop\"),setToArray=require(\"./_setToArray\");/** Used as references for various `Number` constants. */var INFINITY=1/0;/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */var createSet=!(Set&&1/setToArray(new Set([,-0]))[1]==INFINITY)?noop:function(values){return new Set(values);};module.exports=createSet;},{\"./_Set\":427,\"./_setToArray\":533,\"./noop\":567}],486:[function(require,module,exports){var eq=require(\"./eq\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */function customDefaultsAssignIn(objValue,srcValue,key,object){if(objValue===undefined||eq(objValue,objectProto[key])&&!hasOwnProperty.call(object,key)){return srcValue;}return objValue;}module.exports=customDefaultsAssignIn;},{\"./eq\":548}],487:[function(require,module,exports){var getNative=require(\"./_getNative\");var defineProperty=function(){try{var func=getNative(Object,'defineProperty');func({},'',{});return func;}catch(e){}}();module.exports=defineProperty;},{\"./_getNative\":492}],488:[function(require,module,exports){(function(global){/** Detect free variable `global` from Node.js. */var freeGlobal=(typeof global===\"undefined\"?\"undefined\":(0,_typeof6.default)(global))=='object'&&global&&global.Object===Object&&global;module.exports=freeGlobal;}).call(this,typeof global!==\"undefined\"?global:typeof self!==\"undefined\"?self:typeof window!==\"undefined\"?window:{});},{}],489:[function(require,module,exports){var baseGetAllKeys=require(\"./_baseGetAllKeys\"),getSymbols=require(\"./_getSymbols\"),keys=require(\"./keys\");/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */function getAllKeys(object){return baseGetAllKeys(object,keys,getSymbols);}module.exports=getAllKeys;},{\"./_baseGetAllKeys\":452,\"./_getSymbols\":495,\"./keys\":564}],490:[function(require,module,exports){var baseGetAllKeys=require(\"./_baseGetAllKeys\"),getSymbolsIn=require(\"./_getSymbolsIn\"),keysIn=require(\"./keysIn\");/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */function getAllKeysIn(object){return baseGetAllKeys(object,keysIn,getSymbolsIn);}module.exports=getAllKeysIn;},{\"./_baseGetAllKeys\":452,\"./_getSymbolsIn\":496,\"./keysIn\":565}],491:[function(require,module,exports){var isKeyable=require(\"./_isKeyable\");/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=='string'?'string':'hash']:data.map;}module.exports=getMapData;},{\"./_isKeyable\":509}],492:[function(require,module,exports){var baseIsNative=require(\"./_baseIsNative\"),getValue=require(\"./_getValue\");/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}module.exports=getNative;},{\"./_baseIsNative\":457,\"./_getValue\":498}],493:[function(require,module,exports){var overArg=require(\"./_overArg\");/** Built-in value references. */var getPrototype=overArg(_getPrototypeOf2.default,Object);module.exports=getPrototype;},{\"./_overArg\":528}],494:[function(require,module,exports){var _Symbol13=require(\"./_Symbol\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */var nativeObjectToString=objectProto.toString;/** Built-in value references. */var symToStringTag=_Symbol13?_Symbol13.toStringTag:undefined;/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */function getRawTag(value){var isOwn=hasOwnProperty.call(value,symToStringTag),tag=value[symToStringTag];try{value[symToStringTag]=undefined;var unmasked=true;}catch(e){}var result=nativeObjectToString.call(value);if(unmasked){if(isOwn){value[symToStringTag]=tag;}else{delete value[symToStringTag];}}return result;}module.exports=getRawTag;},{\"./_Symbol\":430}],495:[function(require,module,exports){var arrayFilter=require(\"./_arrayFilter\"),stubArray=require(\"./stubArray\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Built-in value references. */var propertyIsEnumerable=objectProto.propertyIsEnumerable;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeGetSymbols=_getOwnPropertySymbols4.default;/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */var getSymbols=!nativeGetSymbols?stubArray:function(object){if(object==null){return[];}object=Object(object);return arrayFilter(nativeGetSymbols(object),function(symbol){return propertyIsEnumerable.call(object,symbol);});};module.exports=getSymbols;},{\"./_arrayFilter\":437,\"./stubArray\":569}],496:[function(require,module,exports){var arrayPush=require(\"./_arrayPush\"),getPrototype=require(\"./_getPrototype\"),getSymbols=require(\"./_getSymbols\"),stubArray=require(\"./stubArray\");/* Built-in method references for those with the same name as other `lodash` methods. */var nativeGetSymbols=_getOwnPropertySymbols4.default;/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */var getSymbolsIn=!nativeGetSymbols?stubArray:function(object){var result=[];while(object){arrayPush(result,getSymbols(object));object=getPrototype(object);}return result;};module.exports=getSymbolsIn;},{\"./_arrayPush\":442,\"./_getPrototype\":493,\"./_getSymbols\":495,\"./stubArray\":569}],497:[function(require,module,exports){var DataView=require(\"./_DataView\"),Map=require(\"./_Map\"),Promise=require(\"./_Promise\"),Set=require(\"./_Set\"),WeakMap=require(\"./_WeakMap\"),baseGetTag=require(\"./_baseGetTag\"),toSource=require(\"./_toSource\");/** `Object#toString` result references. */var mapTag='[object Map]',objectTag='[object Object]',promiseTag='[object Promise]',setTag='[object Set]',weakMapTag='[object WeakMap]';var dataViewTag='[object DataView]';/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */var getTag=baseGetTag;// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map())!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set())!=setTag||WeakMap&&getTag(new WeakMap())!=weakMapTag){getTag=function getTag(value){var result=baseGetTag(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):'';if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag;}}return result;};}module.exports=getTag;},{\"./_DataView\":421,\"./_Map\":424,\"./_Promise\":426,\"./_Set\":427,\"./_WeakMap\":432,\"./_baseGetTag\":453,\"./_toSource\":542}],498:[function(require,module,exports){/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */function getValue(object,key){return object==null?undefined:object[key];}module.exports=getValue;},{}],499:[function(require,module,exports){var nativeCreate=require(\"./_nativeCreate\");/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};this.size=0;}module.exports=hashClear;},{\"./_nativeCreate\":523}],500:[function(require,module,exports){/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */function hashDelete(key){var result=this.has(key)&&delete this.__data__[key];this.size-=result?1:0;return result;}module.exports=hashDelete;},{}],501:[function(require,module,exports){var nativeCreate=require(\"./_nativeCreate\");/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}return hasOwnProperty.call(data,key)?data[key]:undefined;}module.exports=hashGet;},{\"./_nativeCreate\":523}],502:[function(require,module,exports){var nativeCreate=require(\"./_nativeCreate\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}module.exports=hashHas;},{\"./_nativeCreate\":523}],503:[function(require,module,exports){var nativeCreate=require(\"./_nativeCreate\");/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */function hashSet(key,value){var data=this.__data__;this.size+=this.has(key)?0:1;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}module.exports=hashSet;},{\"./_nativeCreate\":523}],504:[function(require,module,exports){/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */function initCloneArray(array){var length=array.length,result=array.constructor(length);// Add properties assigned by `RegExp#exec`.\nif(length&&typeof array[0]=='string'&&hasOwnProperty.call(array,'index')){result.index=array.index;result.input=array.input;}return result;}module.exports=initCloneArray;},{}],505:[function(require,module,exports){var cloneArrayBuffer=require(\"./_cloneArrayBuffer\"),cloneDataView=require(\"./_cloneDataView\"),cloneMap=require(\"./_cloneMap\"),cloneRegExp=require(\"./_cloneRegExp\"),cloneSet=require(\"./_cloneSet\"),cloneSymbol=require(\"./_cloneSymbol\"),cloneTypedArray=require(\"./_cloneTypedArray\");/** `Object#toString` result references. */var boolTag='[object Boolean]',dateTag='[object Date]',mapTag='[object Map]',numberTag='[object Number]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */function initCloneByTag(object,tag,cloneFunc,isDeep){var Ctor=object.constructor;switch(tag){case arrayBufferTag:return cloneArrayBuffer(object);case boolTag:case dateTag:return new Ctor(+object);case dataViewTag:return cloneDataView(object,isDeep);case float32Tag:case float64Tag:case int8Tag:case int16Tag:case int32Tag:case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:return cloneTypedArray(object,isDeep);case mapTag:return cloneMap(object,isDeep,cloneFunc);case numberTag:case stringTag:return new Ctor(object);case regexpTag:return cloneRegExp(object);case setTag:return cloneSet(object,isDeep,cloneFunc);case symbolTag:return cloneSymbol(object);}}module.exports=initCloneByTag;},{\"./_cloneArrayBuffer\":471,\"./_cloneDataView\":473,\"./_cloneMap\":474,\"./_cloneRegExp\":475,\"./_cloneSet\":476,\"./_cloneSymbol\":477,\"./_cloneTypedArray\":478}],506:[function(require,module,exports){var baseCreate=require(\"./_baseCreate\"),getPrototype=require(\"./_getPrototype\"),isPrototype=require(\"./_isPrototype\");/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */function initCloneObject(object){return typeof object.constructor=='function'&&!isPrototype(object)?baseCreate(getPrototype(object)):{};}module.exports=initCloneObject;},{\"./_baseCreate\":450,\"./_getPrototype\":493,\"./_isPrototype\":511}],507:[function(require,module,exports){/** Used as references for various `Number` constants. */var MAX_SAFE_INTEGER=9007199254740991;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\\d*)$/;/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */function isIndex(value,length){length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(typeof value=='number'||reIsUint.test(value))&&value>-1&&value%1==0&&value<length;}module.exports=isIndex;},{}],508:[function(require,module,exports){var eq=require(\"./eq\"),isArrayLike=require(\"./isArrayLike\"),isIndex=require(\"./_isIndex\"),isObject=require(\"./isObject\");/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */function isIterateeCall(value,index,object){if(!isObject(object)){return false;}var type=typeof index===\"undefined\"?\"undefined\":(0,_typeof6.default)(index);if(type=='number'?isArrayLike(object)&&isIndex(index,object.length):type=='string'&&index in object){return eq(object[index],value);}return false;}module.exports=isIterateeCall;},{\"./_isIndex\":507,\"./eq\":548,\"./isArrayLike\":553,\"./isObject\":557}],509:[function(require,module,exports){/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */function isKeyable(value){var type=typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value);return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}module.exports=isKeyable;},{}],510:[function(require,module,exports){var coreJsData=require(\"./_coreJsData\");/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}module.exports=isMasked;},{\"./_coreJsData\":483}],511:[function(require,module,exports){/** Used for built-in method references. */var objectProto=Object.prototype;/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor=='function'&&Ctor.prototype||objectProto;return value===proto;}module.exports=isPrototype;},{}],512:[function(require,module,exports){/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */function listCacheClear(){this.__data__=[];this.size=0;}module.exports=listCacheClear;},{}],513:[function(require,module,exports){var assocIndexOf=require(\"./_assocIndexOf\");/** Used for built-in method references. */var arrayProto=Array.prototype;/** Built-in value references. */var splice=arrayProto.splice;/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}--this.size;return true;}module.exports=listCacheDelete;},{\"./_assocIndexOf\":445}],514:[function(require,module,exports){var assocIndexOf=require(\"./_assocIndexOf\");/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}module.exports=listCacheGet;},{\"./_assocIndexOf\":445}],515:[function(require,module,exports){var assocIndexOf=require(\"./_assocIndexOf\");/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}module.exports=listCacheHas;},{\"./_assocIndexOf\":445}],516:[function(require,module,exports){var assocIndexOf=require(\"./_assocIndexOf\");/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else{data[index][1]=value;}return this;}module.exports=listCacheSet;},{\"./_assocIndexOf\":445}],517:[function(require,module,exports){var Hash=require(\"./_Hash\"),ListCache=require(\"./_ListCache\"),Map=require(\"./_Map\");/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */function mapCacheClear(){this.size=0;this.__data__={'hash':new Hash(),'map':new(Map||ListCache)(),'string':new Hash()};}module.exports=mapCacheClear;},{\"./_Hash\":422,\"./_ListCache\":423,\"./_Map\":424}],518:[function(require,module,exports){var getMapData=require(\"./_getMapData\");/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */function mapCacheDelete(key){var result=getMapData(this,key)['delete'](key);this.size-=result?1:0;return result;}module.exports=mapCacheDelete;},{\"./_getMapData\":491}],519:[function(require,module,exports){var getMapData=require(\"./_getMapData\");/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */function mapCacheGet(key){return getMapData(this,key).get(key);}module.exports=mapCacheGet;},{\"./_getMapData\":491}],520:[function(require,module,exports){var getMapData=require(\"./_getMapData\");/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function mapCacheHas(key){return getMapData(this,key).has(key);}module.exports=mapCacheHas;},{\"./_getMapData\":491}],521:[function(require,module,exports){var getMapData=require(\"./_getMapData\");/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */function mapCacheSet(key,value){var data=getMapData(this,key),size=data.size;data.set(key,value);this.size+=data.size==size?0:1;return this;}module.exports=mapCacheSet;},{\"./_getMapData\":491}],522:[function(require,module,exports){/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}module.exports=mapToArray;},{}],523:[function(require,module,exports){var getNative=require(\"./_getNative\");/* Built-in method references that are verified to be native. */var nativeCreate=getNative(Object,'create');module.exports=nativeCreate;},{\"./_getNative\":492}],524:[function(require,module,exports){var overArg=require(\"./_overArg\");/* Built-in method references for those with the same name as other `lodash` methods. */var nativeKeys=overArg(_keys4.default,Object);module.exports=nativeKeys;},{\"./_overArg\":528}],525:[function(require,module,exports){/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */function nativeKeysIn(object){var result=[];if(object!=null){for(var key in Object(object)){result.push(key);}}return result;}module.exports=nativeKeysIn;},{}],526:[function(require,module,exports){var freeGlobal=require(\"./_freeGlobal\");/** Detect free variable `exports`. */var freeExports=(typeof exports===\"undefined\"?\"undefined\":(0,_typeof6.default)(exports))=='object'&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&(typeof module===\"undefined\"?\"undefined\":(0,_typeof6.default)(module))=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{return freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}}();module.exports=nodeUtil;},{\"./_freeGlobal\":488}],527:[function(require,module,exports){/** Used for built-in method references. */var objectProto=Object.prototype;/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */var nativeObjectToString=objectProto.toString;/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */function objectToString(value){return nativeObjectToString.call(value);}module.exports=objectToString;},{}],528:[function(require,module,exports){/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */function overArg(func,transform){return function(arg){return func(transform(arg));};}module.exports=overArg;},{}],529:[function(require,module,exports){var apply=require(\"./_apply\");/* Built-in method references for those with the same name as other `lodash` methods. */var nativeMax=Math.max;/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */function overRest(func,start,transform){start=nativeMax(start===undefined?func.length-1:start,0);return function(){var args=arguments,index=-1,length=nativeMax(args.length-start,0),array=Array(length);while(++index<length){array[index]=args[start+index];}index=-1;var otherArgs=Array(start+1);while(++index<start){otherArgs[index]=args[index];}otherArgs[start]=transform(array);return apply(func,this,otherArgs);};}module.exports=overRest;},{\"./_apply\":435}],530:[function(require,module,exports){var freeGlobal=require(\"./_freeGlobal\");/** Detect free variable `self`. */var freeSelf=(typeof self===\"undefined\"?\"undefined\":(0,_typeof6.default)(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();module.exports=root;},{\"./_freeGlobal\":488}],531:[function(require,module,exports){/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}module.exports=setCacheAdd;},{}],532:[function(require,module,exports){/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */function setCacheHas(value){return this.__data__.has(value);}module.exports=setCacheHas;},{}],533:[function(require,module,exports){/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}module.exports=setToArray;},{}],534:[function(require,module,exports){var baseSetToString=require(\"./_baseSetToString\"),shortOut=require(\"./_shortOut\");/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */var setToString=shortOut(baseSetToString);module.exports=setToString;},{\"./_baseSetToString\":464,\"./_shortOut\":535}],535:[function(require,module,exports){/** Used to detect hot functions by number of calls within a span of milliseconds. */var HOT_COUNT=800,HOT_SPAN=16;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeNow=Date.now;/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */function shortOut(func){var count=0,lastCalled=0;return function(){var stamp=nativeNow(),remaining=HOT_SPAN-(stamp-lastCalled);lastCalled=stamp;if(remaining>0){if(++count>=HOT_COUNT){return arguments[0];}}else{count=0;}return func.apply(undefined,arguments);};}module.exports=shortOut;},{}],536:[function(require,module,exports){var ListCache=require(\"./_ListCache\");/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */function stackClear(){this.__data__=new ListCache();this.size=0;}module.exports=stackClear;},{\"./_ListCache\":423}],537:[function(require,module,exports){/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */function stackDelete(key){var data=this.__data__,result=data['delete'](key);this.size=data.size;return result;}module.exports=stackDelete;},{}],538:[function(require,module,exports){/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */function stackGet(key){return this.__data__.get(key);}module.exports=stackGet;},{}],539:[function(require,module,exports){/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */function stackHas(key){return this.__data__.has(key);}module.exports=stackHas;},{}],540:[function(require,module,exports){var ListCache=require(\"./_ListCache\"),Map=require(\"./_Map\"),MapCache=require(\"./_MapCache\");/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */function stackSet(key,value){var data=this.__data__;if(data instanceof ListCache){var pairs=data.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);this.size=++data.size;return this;}data=this.__data__=new MapCache(pairs);}data.set(key,value);this.size=data.size;return this;}module.exports=stackSet;},{\"./_ListCache\":423,\"./_Map\":424,\"./_MapCache\":425}],541:[function(require,module,exports){/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */function strictIndexOf(array,value,fromIndex){var index=fromIndex-1,length=array.length;while(++index<length){if(array[index]===value){return index;}}return-1;}module.exports=strictIndexOf;},{}],542:[function(require,module,exports){/** Used for built-in method references. */var funcProto=Function.prototype;/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}try{return func+'';}catch(e){}}return'';}module.exports=toSource;},{}],543:[function(require,module,exports){var assignValue=require(\"./_assignValue\"),copyObject=require(\"./_copyObject\"),createAssigner=require(\"./_createAssigner\"),isArrayLike=require(\"./isArrayLike\"),isPrototype=require(\"./_isPrototype\"),keys=require(\"./keys\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */var assign=createAssigner(function(object,source){if(isPrototype(source)||isArrayLike(source)){copyObject(source,keys(source),object);return;}for(var key in source){if(hasOwnProperty.call(source,key)){assignValue(object,key,source[key]);}}});module.exports=assign;},{\"./_assignValue\":444,\"./_copyObject\":480,\"./_createAssigner\":484,\"./_isPrototype\":511,\"./isArrayLike\":553,\"./keys\":564}],544:[function(require,module,exports){var copyObject=require(\"./_copyObject\"),createAssigner=require(\"./_createAssigner\"),keysIn=require(\"./keysIn\");/**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */var assignInWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keysIn(source),object,customizer);});module.exports=assignInWith;},{\"./_copyObject\":480,\"./_createAssigner\":484,\"./keysIn\":565}],545:[function(require,module,exports){var baseClone=require(\"./_baseClone\");/** Used to compose bitmasks for cloning. */var CLONE_SYMBOLS_FLAG=4;/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */function clone(value){return baseClone(value,CLONE_SYMBOLS_FLAG);}module.exports=clone;},{\"./_baseClone\":449}],546:[function(require,module,exports){/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */function constant(value){return function(){return value;};}module.exports=constant;},{}],547:[function(require,module,exports){var apply=require(\"./_apply\"),assignInWith=require(\"./assignInWith\"),baseRest=require(\"./_baseRest\"),customDefaultsAssignIn=require(\"./_customDefaultsAssignIn\");/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */var defaults=baseRest(function(args){args.push(undefined,customDefaultsAssignIn);return apply(assignInWith,undefined,args);});module.exports=defaults;},{\"./_apply\":435,\"./_baseRest\":463,\"./_customDefaultsAssignIn\":486,\"./assignInWith\":544}],548:[function(require,module,exports){/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */function eq(value,other){return value===other||value!==value&&other!==other;}module.exports=eq;},{}],549:[function(require,module,exports){/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */function identity(value){return value;}module.exports=identity;},{}],550:[function(require,module,exports){var baseIndexOf=require(\"./_baseIndexOf\"),isArrayLike=require(\"./isArrayLike\"),isString=require(\"./isString\"),toInteger=require(\"./toInteger\"),values=require(\"./values\");/* Built-in method references for those with the same name as other `lodash` methods. */var nativeMax=Math.max;/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */function includes(collection,value,fromIndex,guard){collection=isArrayLike(collection)?collection:values(collection);fromIndex=fromIndex&&!guard?toInteger(fromIndex):0;var length=collection.length;if(fromIndex<0){fromIndex=nativeMax(length+fromIndex,0);}return isString(collection)?fromIndex<=length&&collection.indexOf(value,fromIndex)>-1:!!length&&baseIndexOf(collection,value,fromIndex)>-1;}module.exports=includes;},{\"./_baseIndexOf\":454,\"./isArrayLike\":553,\"./isString\":561,\"./toInteger\":572,\"./values\":576}],551:[function(require,module,exports){var baseIsArguments=require(\"./_baseIsArguments\"),isObjectLike=require(\"./isObjectLike\");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Built-in value references. */var propertyIsEnumerable=objectProto.propertyIsEnumerable;/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */var isArguments=baseIsArguments(function(){return arguments;}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,'callee')&&!propertyIsEnumerable.call(value,'callee');};module.exports=isArguments;},{\"./_baseIsArguments\":455,\"./isObjectLike\":558}],552:[function(require,module,exports){/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */var isArray=Array.isArray;module.exports=isArray;},{}],553:[function(require,module,exports){var isFunction=require(\"./isFunction\"),isLength=require(\"./isLength\");/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}module.exports=isArrayLike;},{\"./isFunction\":555,\"./isLength\":556}],554:[function(require,module,exports){var root=require(\"./_root\"),stubFalse=require(\"./stubFalse\");/** Detect free variable `exports`. */var freeExports=(typeof exports===\"undefined\"?\"undefined\":(0,_typeof6.default)(exports))=='object'&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&(typeof module===\"undefined\"?\"undefined\":(0,_typeof6.default)(module))=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Built-in value references. */var Buffer=moduleExports?root.Buffer:undefined;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeIsBuffer=Buffer?Buffer.isBuffer:undefined;/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */var isBuffer=nativeIsBuffer||stubFalse;module.exports=isBuffer;},{\"./_root\":530,\"./stubFalse\":570}],555:[function(require,module,exports){var baseGetTag=require(\"./_baseGetTag\"),isObject=require(\"./isObject\");/** `Object#toString` result references. */var asyncTag='[object AsyncFunction]',funcTag='[object Function]',genTag='[object GeneratorFunction]',proxyTag='[object Proxy]';/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */function isFunction(value){if(!isObject(value)){return false;}// The use of `Object#toString` avoids issues with the `typeof` operator\n// in Safari 9 which returns 'object' for typed arrays and other constructors.\nvar tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}module.exports=isFunction;},{\"./_baseGetTag\":453,\"./isObject\":557}],556:[function(require,module,exports){/** Used as references for various `Number` constants. */var MAX_SAFE_INTEGER=9007199254740991;/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}module.exports=isLength;},{}],557:[function(require,module,exports){/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */function isObject(value){var type=typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value);return value!=null&&(type=='object'||type=='function');}module.exports=isObject;},{}],558:[function(require,module,exports){/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */function isObjectLike(value){return value!=null&&(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))=='object';}module.exports=isObjectLike;},{}],559:[function(require,module,exports){var baseGetTag=require(\"./_baseGetTag\"),getPrototype=require(\"./_getPrototype\"),isObjectLike=require(\"./isObjectLike\");/** `Object#toString` result references. */var objectTag='[object Object]';/** Used for built-in method references. */var funcProto=Function.prototype,objectProto=Object.prototype;/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Used to infer the `Object` constructor. */var objectCtorString=funcToString.call(Object);/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */function isPlainObject(value){if(!isObjectLike(value)||baseGetTag(value)!=objectTag){return false;}var proto=getPrototype(value);if(proto===null){return true;}var Ctor=hasOwnProperty.call(proto,'constructor')&&proto.constructor;return typeof Ctor=='function'&&Ctor instanceof Ctor&&funcToString.call(Ctor)==objectCtorString;}module.exports=isPlainObject;},{\"./_baseGetTag\":453,\"./_getPrototype\":493,\"./isObjectLike\":558}],560:[function(require,module,exports){var baseIsRegExp=require(\"./_baseIsRegExp\"),baseUnary=require(\"./_baseUnary\"),nodeUtil=require(\"./_nodeUtil\");/* Node.js helper references. */var nodeIsRegExp=nodeUtil&&nodeUtil.isRegExp;/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */var isRegExp=nodeIsRegExp?baseUnary(nodeIsRegExp):baseIsRegExp;module.exports=isRegExp;},{\"./_baseIsRegExp\":458,\"./_baseUnary\":467,\"./_nodeUtil\":526}],561:[function(require,module,exports){var baseGetTag=require(\"./_baseGetTag\"),isArray=require(\"./isArray\"),isObjectLike=require(\"./isObjectLike\");/** `Object#toString` result references. */var stringTag='[object String]';/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */function isString(value){return typeof value=='string'||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag;}module.exports=isString;},{\"./_baseGetTag\":453,\"./isArray\":552,\"./isObjectLike\":558}],562:[function(require,module,exports){var baseGetTag=require(\"./_baseGetTag\"),isObjectLike=require(\"./isObjectLike\");/** `Object#toString` result references. */var symbolTag='[object Symbol]';/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */function isSymbol(value){return(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))=='symbol'||isObjectLike(value)&&baseGetTag(value)==symbolTag;}module.exports=isSymbol;},{\"./_baseGetTag\":453,\"./isObjectLike\":558}],563:[function(require,module,exports){var baseIsTypedArray=require(\"./_baseIsTypedArray\"),baseUnary=require(\"./_baseUnary\"),nodeUtil=require(\"./_nodeUtil\");/* Node.js helper references. */var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;module.exports=isTypedArray;},{\"./_baseIsTypedArray\":459,\"./_baseUnary\":467,\"./_nodeUtil\":526}],564:[function(require,module,exports){var arrayLikeKeys=require(\"./_arrayLikeKeys\"),baseKeys=require(\"./_baseKeys\"),isArrayLike=require(\"./isArrayLike\");/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}module.exports=keys;},{\"./_arrayLikeKeys\":440,\"./_baseKeys\":460,\"./isArrayLike\":553}],565:[function(require,module,exports){var arrayLikeKeys=require(\"./_arrayLikeKeys\"),baseKeysIn=require(\"./_baseKeysIn\"),isArrayLike=require(\"./isArrayLike\");/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */function keysIn(object){return isArrayLike(object)?arrayLikeKeys(object,true):baseKeysIn(object);}module.exports=keysIn;},{\"./_arrayLikeKeys\":440,\"./_baseKeysIn\":461,\"./isArrayLike\":553}],566:[function(require,module,exports){(function(global){/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */;(function(){/** Used as a safe reference for `undefined` in pre-ES5 environments. */var undefined;/** Used as the semantic version number. */var VERSION='4.17.4';/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** Error message constants. */var CORE_ERROR_TEXT='Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',FUNC_ERROR_TEXT='Expected a function';/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used as the maximum memoize cache size. */var MAX_MEMOIZE_SIZE=500;/** Used as the internal argument placeholder. */var PLACEHOLDER='__lodash_placeholder__';/** Used to compose bitmasks for cloning. */var CLONE_DEEP_FLAG=1,CLONE_FLAT_FLAG=2,CLONE_SYMBOLS_FLAG=4;/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** Used to compose bitmasks for function metadata. */var WRAP_BIND_FLAG=1,WRAP_BIND_KEY_FLAG=2,WRAP_CURRY_BOUND_FLAG=4,WRAP_CURRY_FLAG=8,WRAP_CURRY_RIGHT_FLAG=16,WRAP_PARTIAL_FLAG=32,WRAP_PARTIAL_RIGHT_FLAG=64,WRAP_ARY_FLAG=128,WRAP_REARG_FLAG=256,WRAP_FLIP_FLAG=512;/** Used as default options for `_.truncate`. */var DEFAULT_TRUNC_LENGTH=30,DEFAULT_TRUNC_OMISSION='...';/** Used to detect hot functions by number of calls within a span of milliseconds. */var HOT_COUNT=800,HOT_SPAN=16;/** Used to indicate the type of lazy iteratees. */var LAZY_FILTER_FLAG=1,LAZY_MAP_FLAG=2,LAZY_WHILE_FLAG=3;/** Used as references for various `Number` constants. */var INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991,MAX_INTEGER=1.7976931348623157e+308,NAN=0/0;/** Used as references for the maximum length and index of an array. */var MAX_ARRAY_LENGTH=4294967295,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1;/** Used to associate wrap methods with their bit flags. */var wrapFlags=[['ary',WRAP_ARY_FLAG],['bind',WRAP_BIND_FLAG],['bindKey',WRAP_BIND_KEY_FLAG],['curry',WRAP_CURRY_FLAG],['curryRight',WRAP_CURRY_RIGHT_FLAG],['flip',WRAP_FLIP_FLAG],['partial',WRAP_PARTIAL_FLAG],['partialRight',WRAP_PARTIAL_RIGHT_FLAG],['rearg',WRAP_REARG_FLAG]];/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',asyncTag='[object AsyncFunction]',boolTag='[object Boolean]',dateTag='[object Date]',domExcTag='[object DOMException]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',nullTag='[object Null]',objectTag='[object Object]',promiseTag='[object Promise]',proxyTag='[object Proxy]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',undefinedTag='[object Undefined]',weakMapTag='[object WeakMap]',weakSetTag='[object WeakSet]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to match empty string literals in compiled template source. */var reEmptyStringLeading=/\\b__p \\+= '';/g,reEmptyStringMiddle=/\\b(__p \\+=) '' \\+/g,reEmptyStringTrailing=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;/** Used to match HTML entities and HTML characters. */var reEscapedHtml=/&(?:amp|lt|gt|quot|#39);/g,reUnescapedHtml=/[&<>\"']/g,reHasEscapedHtml=RegExp(reEscapedHtml.source),reHasUnescapedHtml=RegExp(reUnescapedHtml.source);/** Used to match template delimiters. */var reEscape=/<%-([\\s\\S]+?)%>/g,reEvaluate=/<%([\\s\\S]+?)%>/g,reInterpolate=/<%=([\\s\\S]+?)%>/g;/** Used to match property names within property paths. */var reIsDeepProp=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,reIsPlainProp=/^\\w*$/,reLeadingDot=/^\\./,rePropName=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;/**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */var reRegExpChar=/[\\\\^$.*+?()[\\]{}|]/g,reHasRegExpChar=RegExp(reRegExpChar.source);/** Used to match leading and trailing whitespace. */var reTrim=/^\\s+|\\s+$/g,reTrimStart=/^\\s+/,reTrimEnd=/\\s+$/;/** Used to match wrap detail comments. */var reWrapComment=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,reWrapDetails=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,reSplitDetails=/,? & /;/** Used to match words composed of alphanumeric characters. */var reAsciiWord=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;/** Used to match backslashes in property paths. */var reEscapeChar=/\\\\(\\\\)?/g;/**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */var reEsTemplate=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;/** Used to match `RegExp` flags from their coerced string values. */var reFlags=/\\w*$/;/** Used to detect bad signed hexadecimal string values. */var reIsBadHex=/^[-+]0x[0-9a-f]+$/i;/** Used to detect binary string values. */var reIsBinary=/^0b[01]+$/i;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\\[object .+?Constructor\\]$/;/** Used to detect octal string values. */var reIsOctal=/^0o[0-7]+$/i;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\\d*)$/;/** Used to match Latin Unicode letters (excluding mathematical operators). */var reLatin=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;/** Used to ensure capturing order of template delimiters. */var reNoMatch=/($^)/;/** Used to match unescaped characters in compiled string literals. */var reUnescapedString=/['\\n\\r\\u2028\\u2029\\\\]/g;/** Used to compose unicode character classes. */var rsAstralRange=\"\\\\ud800-\\\\udfff\",rsComboMarksRange=\"\\\\u0300-\\\\u036f\",reComboHalfMarksRange=\"\\\\ufe20-\\\\ufe2f\",rsComboSymbolsRange=\"\\\\u20d0-\\\\u20ff\",rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsDingbatRange=\"\\\\u2700-\\\\u27bf\",rsLowerRange='a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',rsMathOpRange='\\\\xac\\\\xb1\\\\xd7\\\\xf7',rsNonCharRange='\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',rsPunctuationRange=\"\\\\u2000-\\\\u206f\",rsSpaceRange=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",rsUpperRange='A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',rsVarRange=\"\\\\ufe0e\\\\ufe0f\",rsBreakRange=rsMathOpRange+rsNonCharRange+rsPunctuationRange+rsSpaceRange;/** Used to compose unicode capture groups. */var rsApos=\"['\\u2019]\",rsAstral='['+rsAstralRange+']',rsBreak='['+rsBreakRange+']',rsCombo='['+rsComboRange+']',rsDigits='\\\\d+',rsDingbat='['+rsDingbatRange+']',rsLower='['+rsLowerRange+']',rsMisc='[^'+rsAstralRange+rsBreakRange+rsDigits+rsDingbatRange+rsLowerRange+rsUpperRange+']',rsFitz=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",rsModifier='(?:'+rsCombo+'|'+rsFitz+')',rsNonAstral='[^'+rsAstralRange+']',rsRegional=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",rsSurrPair=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",rsUpper='['+rsUpperRange+']',rsZWJ=\"\\\\u200d\";/** Used to compose unicode regexes. */var rsMiscLower='(?:'+rsLower+'|'+rsMisc+')',rsMiscUpper='(?:'+rsUpper+'|'+rsMisc+')',rsOptContrLower='(?:'+rsApos+'(?:d|ll|m|re|s|t|ve))?',rsOptContrUpper='(?:'+rsApos+'(?:D|LL|M|RE|S|T|VE))?',reOptMod=rsModifier+'?',rsOptVar='['+rsVarRange+']?',rsOptJoin='(?:'+rsZWJ+'(?:'+[rsNonAstral,rsRegional,rsSurrPair].join('|')+')'+rsOptVar+reOptMod+')*',rsOrdLower='\\\\d*(?:(?:1st|2nd|3rd|(?![123])\\\\dth)\\\\b)',rsOrdUpper='\\\\d*(?:(?:1ST|2ND|3RD|(?![123])\\\\dTH)\\\\b)',rsSeq=rsOptVar+reOptMod+rsOptJoin,rsEmoji='(?:'+[rsDingbat,rsRegional,rsSurrPair].join('|')+')'+rsSeq,rsSymbol='(?:'+[rsNonAstral+rsCombo+'?',rsCombo,rsRegional,rsSurrPair,rsAstral].join('|')+')';/** Used to match apostrophes. */var reApos=RegExp(rsApos,'g');/**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */var reComboMark=RegExp(rsCombo,'g');/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */var reUnicode=RegExp(rsFitz+'(?='+rsFitz+')|'+rsSymbol+rsSeq,'g');/** Used to match complex or compound words. */var reUnicodeWord=RegExp([rsUpper+'?'+rsLower+'+'+rsOptContrLower+'(?='+[rsBreak,rsUpper,'$'].join('|')+')',rsMiscUpper+'+'+rsOptContrUpper+'(?='+[rsBreak,rsUpper+rsMiscLower,'$'].join('|')+')',rsUpper+'?'+rsMiscLower+'+'+rsOptContrLower,rsUpper+'+'+rsOptContrUpper,rsOrdUpper,rsOrdLower,rsDigits,rsEmoji].join('|'),'g');/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */var reHasUnicode=RegExp('['+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+']');/** Used to detect strings that need a more robust regexp to match words. */var reHasUnicodeWord=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;/** Used to assign default `context` object properties. */var contextProps=['Array','Buffer','DataView','Date','Error','Float32Array','Float64Array','Function','Int8Array','Int16Array','Int32Array','Map','Math','Object','Promise','RegExp','Set','String','Symbol','TypeError','Uint8Array','Uint8ClampedArray','Uint16Array','Uint32Array','WeakMap','_','clearTimeout','isFinite','parseInt','setTimeout'];/** Used to make template sourceURLs easier to identify. */var templateCounter=-1;/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/** Used to identify `toStringTag` values supported by `_.clone`. */var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[dataViewTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[mapTag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[setTag]=cloneableTags[stringTag]=cloneableTags[symbolTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=true;cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[weakMapTag]=false;/** Used to map Latin Unicode letters to basic Latin letters. */var deburredLetters={// Latin-1 Supplement block.\n'\\xc0':'A','\\xc1':'A','\\xc2':'A','\\xc3':'A','\\xc4':'A','\\xc5':'A','\\xe0':'a','\\xe1':'a','\\xe2':'a','\\xe3':'a','\\xe4':'a','\\xe5':'a','\\xc7':'C','\\xe7':'c','\\xd0':'D','\\xf0':'d','\\xc8':'E','\\xc9':'E','\\xca':'E','\\xcb':'E','\\xe8':'e','\\xe9':'e','\\xea':'e','\\xeb':'e','\\xcc':'I','\\xcd':'I','\\xce':'I','\\xcf':'I','\\xec':'i','\\xed':'i','\\xee':'i','\\xef':'i','\\xd1':'N','\\xf1':'n','\\xd2':'O','\\xd3':'O','\\xd4':'O','\\xd5':'O','\\xd6':'O','\\xd8':'O','\\xf2':'o','\\xf3':'o','\\xf4':'o','\\xf5':'o','\\xf6':'o','\\xf8':'o','\\xd9':'U','\\xda':'U','\\xdb':'U','\\xdc':'U','\\xf9':'u','\\xfa':'u','\\xfb':'u','\\xfc':'u','\\xdd':'Y','\\xfd':'y','\\xff':'y','\\xc6':'Ae','\\xe6':'ae','\\xde':'Th','\\xfe':'th','\\xdf':'ss',// Latin Extended-A block.\n\"\\u0100\":'A',\"\\u0102\":'A',\"\\u0104\":'A',\"\\u0101\":'a',\"\\u0103\":'a',\"\\u0105\":'a',\"\\u0106\":'C',\"\\u0108\":'C',\"\\u010A\":'C',\"\\u010C\":'C',\"\\u0107\":'c',\"\\u0109\":'c',\"\\u010B\":'c',\"\\u010D\":'c',\"\\u010E\":'D',\"\\u0110\":'D',\"\\u010F\":'d',\"\\u0111\":'d',\"\\u0112\":'E',\"\\u0114\":'E',\"\\u0116\":'E',\"\\u0118\":'E',\"\\u011A\":'E',\"\\u0113\":'e',\"\\u0115\":'e',\"\\u0117\":'e',\"\\u0119\":'e',\"\\u011B\":'e',\"\\u011C\":'G',\"\\u011E\":'G',\"\\u0120\":'G',\"\\u0122\":'G',\"\\u011D\":'g',\"\\u011F\":'g',\"\\u0121\":'g',\"\\u0123\":'g',\"\\u0124\":'H',\"\\u0126\":'H',\"\\u0125\":'h',\"\\u0127\":'h',\"\\u0128\":'I',\"\\u012A\":'I',\"\\u012C\":'I',\"\\u012E\":'I',\"\\u0130\":'I',\"\\u0129\":'i',\"\\u012B\":'i',\"\\u012D\":'i',\"\\u012F\":'i',\"\\u0131\":'i',\"\\u0134\":'J',\"\\u0135\":'j',\"\\u0136\":'K',\"\\u0137\":'k',\"\\u0138\":'k',\"\\u0139\":'L',\"\\u013B\":'L',\"\\u013D\":'L',\"\\u013F\":'L',\"\\u0141\":'L',\"\\u013A\":'l',\"\\u013C\":'l',\"\\u013E\":'l',\"\\u0140\":'l',\"\\u0142\":'l',\"\\u0143\":'N',\"\\u0145\":'N',\"\\u0147\":'N',\"\\u014A\":'N',\"\\u0144\":'n',\"\\u0146\":'n',\"\\u0148\":'n',\"\\u014B\":'n',\"\\u014C\":'O',\"\\u014E\":'O',\"\\u0150\":'O',\"\\u014D\":'o',\"\\u014F\":'o',\"\\u0151\":'o',\"\\u0154\":'R',\"\\u0156\":'R',\"\\u0158\":'R',\"\\u0155\":'r',\"\\u0157\":'r',\"\\u0159\":'r',\"\\u015A\":'S',\"\\u015C\":'S',\"\\u015E\":'S',\"\\u0160\":'S',\"\\u015B\":'s',\"\\u015D\":'s',\"\\u015F\":'s',\"\\u0161\":'s',\"\\u0162\":'T',\"\\u0164\":'T',\"\\u0166\":'T',\"\\u0163\":'t',\"\\u0165\":'t',\"\\u0167\":'t',\"\\u0168\":'U',\"\\u016A\":'U',\"\\u016C\":'U',\"\\u016E\":'U',\"\\u0170\":'U',\"\\u0172\":'U',\"\\u0169\":'u',\"\\u016B\":'u',\"\\u016D\":'u',\"\\u016F\":'u',\"\\u0171\":'u',\"\\u0173\":'u',\"\\u0174\":'W',\"\\u0175\":'w',\"\\u0176\":'Y',\"\\u0177\":'y',\"\\u0178\":'Y',\"\\u0179\":'Z',\"\\u017B\":'Z',\"\\u017D\":'Z',\"\\u017A\":'z',\"\\u017C\":'z',\"\\u017E\":'z',\"\\u0132\":'IJ',\"\\u0133\":'ij',\"\\u0152\":'Oe',\"\\u0153\":'oe',\"\\u0149\":\"'n\",\"\\u017F\":'s'};/** Used to map characters to HTML entities. */var htmlEscapes={'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'};/** Used to map HTML entities to characters. */var htmlUnescapes={'&amp;':'&','&lt;':'<','&gt;':'>','&quot;':'\"','&#39;':\"'\"};/** Used to escape characters for inclusion in compiled string literals. */var stringEscapes={'\\\\':'\\\\',\"'\":\"'\",'\\n':'n','\\r':'r',\"\\u2028\":'u2028',\"\\u2029\":'u2029'};/** Built-in method references without a dependency on `root`. */var freeParseFloat=parseFloat,freeParseInt=parseInt;/** Detect free variable `global` from Node.js. */var freeGlobal=(typeof global===\"undefined\"?\"undefined\":(0,_typeof6.default)(global))=='object'&&global&&global.Object===Object&&global;/** Detect free variable `self`. */var freeSelf=(typeof self===\"undefined\"?\"undefined\":(0,_typeof6.default)(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Detect free variable `exports`. */var freeExports=(typeof exports===\"undefined\"?\"undefined\":(0,_typeof6.default)(exports))=='object'&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&(typeof module===\"undefined\"?\"undefined\":(0,_typeof6.default)(module))=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{return freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}}();/* Node.js helper references. */var nodeIsArrayBuffer=nodeUtil&&nodeUtil.isArrayBuffer,nodeIsDate=nodeUtil&&nodeUtil.isDate,nodeIsMap=nodeUtil&&nodeUtil.isMap,nodeIsRegExp=nodeUtil&&nodeUtil.isRegExp,nodeIsSet=nodeUtil&&nodeUtil.isSet,nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/*--------------------------------------------------------------------------*//**\n   * Adds the key-value `pair` to `map`.\n   *\n   * @private\n   * @param {Object} map The map to modify.\n   * @param {Array} pair The key-value pair to add.\n   * @returns {Object} Returns `map`.\n   */function addMapEntry(map,pair){// Don't return `map.set` because it's not chainable in IE 11.\nmap.set(pair[0],pair[1]);return map;}/**\n   * Adds `value` to `set`.\n   *\n   * @private\n   * @param {Object} set The set to modify.\n   * @param {*} value The value to add.\n   * @returns {Object} Returns `set`.\n   */function addSetEntry(set,value){// Don't return `set.add` because it's not chainable in IE 11.\nset.add(value);return set;}/**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */function apply(func,thisArg,args){switch(args.length){case 0:return func.call(thisArg);case 1:return func.call(thisArg,args[0]);case 2:return func.call(thisArg,args[0],args[1]);case 3:return func.call(thisArg,args[0],args[1],args[2]);}return func.apply(thisArg,args);}/**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */function arrayAggregator(array,setter,iteratee,accumulator){var index=-1,length=array==null?0:array.length;while(++index<length){var value=array[index];setter(accumulator,value,iteratee(value),array);}return accumulator;}/**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */function arrayEach(array,iteratee){var index=-1,length=array==null?0:array.length;while(++index<length){if(iteratee(array[index],index,array)===false){break;}}return array;}/**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */function arrayEachRight(array,iteratee){var length=array==null?0:array.length;while(length--){if(iteratee(array[length],length,array)===false){break;}}return array;}/**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */function arrayEvery(array,predicate){var index=-1,length=array==null?0:array.length;while(++index<length){if(!predicate(array[index],index,array)){return false;}}return true;}/**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */function arrayFilter(array,predicate){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(predicate(value,index,array)){result[resIndex++]=value;}}return result;}/**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */function arrayIncludes(array,value){var length=array==null?0:array.length;return!!length&&baseIndexOf(array,value,0)>-1;}/**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */function arrayIncludesWith(array,value,comparator){var index=-1,length=array==null?0:array.length;while(++index<length){if(comparator(value,array[index])){return true;}}return false;}/**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */function arrayMap(array,iteratee){var index=-1,length=array==null?0:array.length,result=Array(length);while(++index<length){result[index]=iteratee(array[index],index,array);}return result;}/**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */function arrayPush(array,values){var index=-1,length=values.length,offset=array.length;while(++index<length){array[offset+index]=values[index];}return array;}/**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */function arrayReduce(array,iteratee,accumulator,initAccum){var index=-1,length=array==null?0:array.length;if(initAccum&&length){accumulator=array[++index];}while(++index<length){accumulator=iteratee(accumulator,array[index],index,array);}return accumulator;}/**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */function arrayReduceRight(array,iteratee,accumulator,initAccum){var length=array==null?0:array.length;if(initAccum&&length){accumulator=array[--length];}while(length--){accumulator=iteratee(accumulator,array[length],length,array);}return accumulator;}/**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */function arraySome(array,predicate){var index=-1,length=array==null?0:array.length;while(++index<length){if(predicate(array[index],index,array)){return true;}}return false;}/**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */var asciiSize=baseProperty('length');/**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */function asciiToArray(string){return string.split('');}/**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */function asciiWords(string){return string.match(reAsciiWord)||[];}/**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */function baseFindKey(collection,predicate,eachFunc){var result;eachFunc(collection,function(value,key,collection){if(predicate(value,key,collection)){result=key;return false;}});return result;}/**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */function baseFindIndex(array,predicate,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?1:-1);while(fromRight?index--:++index<length){if(predicate(array[index],index,array)){return index;}}return-1;}/**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */function baseIndexOf(array,value,fromIndex){return value===value?strictIndexOf(array,value,fromIndex):baseFindIndex(array,baseIsNaN,fromIndex);}/**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */function baseIndexOfWith(array,value,fromIndex,comparator){var index=fromIndex-1,length=array.length;while(++index<length){if(comparator(array[index],value)){return index;}}return-1;}/**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */function baseIsNaN(value){return value!==value;}/**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */function baseMean(array,iteratee){var length=array==null?0:array.length;return length?baseSum(array,iteratee)/length:NAN;}/**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */function baseProperty(key){return function(object){return object==null?undefined:object[key];};}/**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */function basePropertyOf(object){return function(key){return object==null?undefined:object[key];};}/**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */function baseReduce(collection,iteratee,accumulator,initAccum,eachFunc){eachFunc(collection,function(value,index,collection){accumulator=initAccum?(initAccum=false,value):iteratee(accumulator,value,index,collection);});return accumulator;}/**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */function baseSortBy(array,comparer){var length=array.length;array.sort(comparer);while(length--){array[length]=array[length].value;}return array;}/**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */function baseSum(array,iteratee){var result,index=-1,length=array.length;while(++index<length){var current=iteratee(array[index]);if(current!==undefined){result=result===undefined?current:result+current;}}return result;}/**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index);}return result;}/**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */function baseToPairs(object,props){return arrayMap(props,function(key){return[key,object[key]];});}/**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */function baseUnary(func){return function(value){return func(value);};}/**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */function baseValues(object,props){return arrayMap(props,function(key){return object[key];});}/**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */function cacheHas(cache,key){return cache.has(key);}/**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */function charsStartIndex(strSymbols,chrSymbols){var index=-1,length=strSymbols.length;while(++index<length&&baseIndexOf(chrSymbols,strSymbols[index],0)>-1){}return index;}/**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */function charsEndIndex(strSymbols,chrSymbols){var index=strSymbols.length;while(index--&&baseIndexOf(chrSymbols,strSymbols[index],0)>-1){}return index;}/**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */function countHolders(array,placeholder){var length=array.length,result=0;while(length--){if(array[length]===placeholder){++result;}}return result;}/**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */var deburrLetter=basePropertyOf(deburredLetters);/**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */var escapeHtmlChar=basePropertyOf(htmlEscapes);/**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */function escapeStringChar(chr){return'\\\\'+stringEscapes[chr];}/**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */function getValue(object,key){return object==null?undefined:object[key];}/**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */function hasUnicode(string){return reHasUnicode.test(string);}/**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */function hasUnicodeWord(string){return reHasUnicodeWord.test(string);}/**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */function iteratorToArray(iterator){var data,result=[];while(!(data=iterator.next()).done){result.push(data.value);}return result;}/**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}/**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */function overArg(func,transform){return function(arg){return func(transform(arg));};}/**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */function replaceHolders(array,placeholder){var index=-1,length=array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(value===placeholder||value===PLACEHOLDER){array[index]=PLACEHOLDER;result[resIndex++]=index;}}return result;}/**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}/**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */function setToPairs(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=[value,value];});return result;}/**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */function strictIndexOf(array,value,fromIndex){var index=fromIndex-1,length=array.length;while(++index<length){if(array[index]===value){return index;}}return-1;}/**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */function strictLastIndexOf(array,value,fromIndex){var index=fromIndex+1;while(index--){if(array[index]===value){return index;}}return index;}/**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */function stringSize(string){return hasUnicode(string)?unicodeSize(string):asciiSize(string);}/**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */function stringToArray(string){return hasUnicode(string)?unicodeToArray(string):asciiToArray(string);}/**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */var unescapeHtmlChar=basePropertyOf(htmlUnescapes);/**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */function unicodeSize(string){var result=reUnicode.lastIndex=0;while(reUnicode.test(string)){++result;}return result;}/**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */function unicodeToArray(string){return string.match(reUnicode)||[];}/**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */function unicodeWords(string){return string.match(reUnicodeWord)||[];}/*--------------------------------------------------------------------------*//**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */var runInContext=function runInContext(context){context=context==null?root:_.defaults(root.Object(),context,_.pick(root,contextProps));/** Built-in constructor references. */var Array=context.Array,Date=context.Date,Error=context.Error,Function=context.Function,Math=context.Math,Object=context.Object,RegExp=context.RegExp,String=context.String,TypeError=context.TypeError;/** Used for built-in method references. */var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;/** Used to detect overreaching core-js shims. */var coreJsData=context['__core-js_shared__'];/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Used to generate unique IDs. */var idCounter=0;/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */var nativeObjectToString=objectProto.toString;/** Used to infer the `Object` constructor. */var objectCtorString=funcToString.call(Object);/** Used to restore the original `_` reference in `_.noConflict`. */var oldDash=root._;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,'$1.*?')+'$');/** Built-in value references. */var Buffer=moduleExports?context.Buffer:undefined,_Symbol14=context.Symbol,Uint8Array=context.Uint8Array,allocUnsafe=Buffer?Buffer.allocUnsafe:undefined,getPrototype=overArg(Object.getPrototypeOf,Object),objectCreate=Object.create,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice,spreadableSymbol=_Symbol14?_Symbol14.isConcatSpreadable:undefined,symIterator=_Symbol14?_Symbol14.iterator:undefined,symToStringTag=_Symbol14?_Symbol14.toStringTag:undefined;var defineProperty=function(){try{var func=getNative(Object,'defineProperty');func({},'',{});return func;}catch(e){}}();/** Mocked built-ins. */var ctxClearTimeout=context.clearTimeout!==root.clearTimeout&&context.clearTimeout,ctxNow=Date&&Date.now!==root.Date.now&&Date.now,ctxSetTimeout=context.setTimeout!==root.setTimeout&&context.setTimeout;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeCeil=Math.ceil,nativeFloor=Math.floor,nativeGetSymbols=Object.getOwnPropertySymbols,nativeIsBuffer=Buffer?Buffer.isBuffer:undefined,nativeIsFinite=context.isFinite,nativeJoin=arrayProto.join,nativeKeys=overArg(Object.keys,Object),nativeMax=Math.max,nativeMin=Math.min,nativeNow=Date.now,nativeParseInt=context.parseInt,nativeRandom=Math.random,nativeReverse=arrayProto.reverse;/* Built-in method references that are verified to be native. */var DataView=getNative(context,'DataView'),Map=getNative(context,'Map'),Promise=getNative(context,'Promise'),Set=getNative(context,'Set'),WeakMap=getNative(context,'WeakMap'),nativeCreate=getNative(Object,'create');/** Used to store function metadata. */var metaMap=WeakMap&&new WeakMap();/** Used to lookup unminified function names. */var realNames={};/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol14?_Symbol14.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;/*------------------------------------------------------------------------*//**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */function lodash(value){if(isObjectLike(value)&&!isArray(value)&&!(value instanceof LazyWrapper)){if(value instanceof LodashWrapper){return value;}if(hasOwnProperty.call(value,'__wrapped__')){return wrapperClone(value);}}return new LodashWrapper(value);}/**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */var baseCreate=function(){function object(){}return function(proto){if(!isObject(proto)){return{};}if(objectCreate){return objectCreate(proto);}object.prototype=proto;var result=new object();object.prototype=undefined;return result;};}();/**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */function baseLodash(){}// No operation performed.\n/**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */function LodashWrapper(value,chainAll){this.__wrapped__=value;this.__actions__=[];this.__chain__=!!chainAll;this.__index__=0;this.__values__=undefined;}/**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */lodash.templateSettings={/**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */'escape':reEscape,/**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */'evaluate':reEvaluate,/**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */'interpolate':reInterpolate,/**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */'variable':'',/**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */'imports':{/**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */'_':lodash}};// Ensure wrappers are instances of `baseLodash`.\nlodash.prototype=baseLodash.prototype;lodash.prototype.constructor=lodash;LodashWrapper.prototype=baseCreate(baseLodash.prototype);LodashWrapper.prototype.constructor=LodashWrapper;/*------------------------------------------------------------------------*//**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */function LazyWrapper(value){this.__wrapped__=value;this.__actions__=[];this.__dir__=1;this.__filtered__=false;this.__iteratees__=[];this.__takeCount__=MAX_ARRAY_LENGTH;this.__views__=[];}/**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */function lazyClone(){var result=new LazyWrapper(this.__wrapped__);result.__actions__=copyArray(this.__actions__);result.__dir__=this.__dir__;result.__filtered__=this.__filtered__;result.__iteratees__=copyArray(this.__iteratees__);result.__takeCount__=this.__takeCount__;result.__views__=copyArray(this.__views__);return result;}/**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */function lazyReverse(){if(this.__filtered__){var result=new LazyWrapper(this);result.__dir__=-1;result.__filtered__=true;}else{result=this.clone();result.__dir__*=-1;}return result;}/**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */function lazyValue(){var array=this.__wrapped__.value(),dir=this.__dir__,isArr=isArray(array),isRight=dir<0,arrLength=isArr?array.length:0,view=getView(0,arrLength,this.__views__),start=view.start,end=view.end,length=end-start,index=isRight?end:start-1,iteratees=this.__iteratees__,iterLength=iteratees.length,resIndex=0,takeCount=nativeMin(length,this.__takeCount__);if(!isArr||!isRight&&arrLength==length&&takeCount==length){return baseWrapperValue(array,this.__actions__);}var result=[];outer:while(length--&&resIndex<takeCount){index+=dir;var iterIndex=-1,value=array[index];while(++iterIndex<iterLength){var data=iteratees[iterIndex],iteratee=data.iteratee,type=data.type,computed=iteratee(value);if(type==LAZY_MAP_FLAG){value=computed;}else if(!computed){if(type==LAZY_FILTER_FLAG){continue outer;}else{break outer;}}}result[resIndex++]=value;}return result;}// Ensure `LazyWrapper` is an instance of `baseLodash`.\nLazyWrapper.prototype=baseCreate(baseLodash.prototype);LazyWrapper.prototype.constructor=LazyWrapper;/*------------------------------------------------------------------------*//**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */function Hash(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};this.size=0;}/**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */function hashDelete(key){var result=this.has(key)&&delete this.__data__[key];this.size-=result?1:0;return result;}/**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}return hasOwnProperty.call(data,key)?data[key]:undefined;}/**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}/**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */function hashSet(key,value){var data=this.__data__;this.size+=this.has(key)?0:1;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}// Add methods to `Hash`.\nHash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;/*------------------------------------------------------------------------*//**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */function ListCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */function listCacheClear(){this.__data__=[];this.size=0;}/**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}--this.size;return true;}/**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}/**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}/**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else{data[index][1]=value;}return this;}// Add methods to `ListCache`.\nListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;/*------------------------------------------------------------------------*//**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */function MapCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */function mapCacheClear(){this.size=0;this.__data__={'hash':new Hash(),'map':new(Map||ListCache)(),'string':new Hash()};}/**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */function mapCacheDelete(key){var result=getMapData(this,key)['delete'](key);this.size-=result?1:0;return result;}/**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */function mapCacheGet(key){return getMapData(this,key).get(key);}/**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */function mapCacheHas(key){return getMapData(this,key).has(key);}/**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */function mapCacheSet(key,value){var data=getMapData(this,key),size=data.size;data.set(key,value);this.size+=data.size==size?0:1;return this;}// Add methods to `MapCache`.\nMapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;/*------------------------------------------------------------------------*//**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */function SetCache(values){var index=-1,length=values==null?0:values.length;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}/**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}/**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */function setCacheHas(value){return this.__data__.has(value);}// Add methods to `SetCache`.\nSetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;/*------------------------------------------------------------------------*//**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */function Stack(entries){var data=this.__data__=new ListCache(entries);this.size=data.size;}/**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */function stackClear(){this.__data__=new ListCache();this.size=0;}/**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */function stackDelete(key){var data=this.__data__,result=data['delete'](key);this.size=data.size;return result;}/**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */function stackGet(key){return this.__data__.get(key);}/**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */function stackHas(key){return this.__data__.has(key);}/**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */function stackSet(key,value){var data=this.__data__;if(data instanceof ListCache){var pairs=data.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);this.size=++data.size;return this;}data=this.__data__=new MapCache(pairs);}data.set(key,value);this.size=data.size;return this;}// Add methods to `Stack`.\nStack.prototype.clear=stackClear;Stack.prototype['delete']=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;/*------------------------------------------------------------------------*//**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */function arrayLikeKeys(value,inherited){var isArr=isArray(value),isArg=!isArr&&isArguments(value),isBuff=!isArr&&!isArg&&isBuffer(value),isType=!isArr&&!isArg&&!isBuff&&isTypedArray(value),skipIndexes=isArr||isArg||isBuff||isType,result=skipIndexes?baseTimes(value.length,String):[],length=result.length;for(var key in value){if((inherited||hasOwnProperty.call(value,key))&&!(skipIndexes&&(// Safari 9 has enumerable `arguments.length` in strict mode.\nkey=='length'||// Node.js 0.10 has enumerable non-index properties on buffers.\nisBuff&&(key=='offset'||key=='parent')||// PhantomJS 2 has enumerable non-index properties on typed arrays.\nisType&&(key=='buffer'||key=='byteLength'||key=='byteOffset')||// Skip index properties.\nisIndex(key,length)))){result.push(key);}}return result;}/**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */function arraySample(array){var length=array.length;return length?array[baseRandom(0,length-1)]:undefined;}/**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */function arraySampleSize(array,n){return shuffleSelf(copyArray(array),baseClamp(n,0,array.length));}/**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */function arrayShuffle(array){return shuffleSelf(copyArray(array));}/**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */function assignMergeValue(object,key,value){if(value!==undefined&&!eq(object[key],value)||value===undefined&&!(key in object)){baseAssignValue(object,key,value);}}/**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */function assignValue(object,key,value){var objValue=object[key];if(!(hasOwnProperty.call(object,key)&&eq(objValue,value))||value===undefined&&!(key in object)){baseAssignValue(object,key,value);}}/**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}return-1;}/**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */function baseAggregator(collection,setter,iteratee,accumulator){baseEach(collection,function(value,key,collection){setter(accumulator,value,iteratee(value),collection);});return accumulator;}/**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */function baseAssign(object,source){return object&&copyObject(source,keys(source),object);}/**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */function baseAssignIn(object,source){return object&&copyObject(source,keysIn(source),object);}/**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */function baseAssignValue(object,key,value){if(key=='__proto__'&&defineProperty){defineProperty(object,key,{'configurable':true,'enumerable':true,'value':value,'writable':true});}else{object[key]=value;}}/**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */function baseAt(object,paths){var index=-1,length=paths.length,result=Array(length),skip=object==null;while(++index<length){result[index]=skip?undefined:get(object,paths[index]);}return result;}/**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */function baseClamp(number,lower,upper){if(number===number){if(upper!==undefined){number=number<=upper?number:upper;}if(lower!==undefined){number=number>=lower?number:lower;}}return number;}/**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */function baseClone(value,bitmask,customizer,key,object,stack){var result,isDeep=bitmask&CLONE_DEEP_FLAG,isFlat=bitmask&CLONE_FLAT_FLAG,isFull=bitmask&CLONE_SYMBOLS_FLAG;if(customizer){result=object?customizer(value,key,object,stack):customizer(value);}if(result!==undefined){return result;}if(!isObject(value)){return value;}var isArr=isArray(value);if(isArr){result=initCloneArray(value);if(!isDeep){return copyArray(value,result);}}else{var tag=getTag(value),isFunc=tag==funcTag||tag==genTag;if(isBuffer(value)){return cloneBuffer(value,isDeep);}if(tag==objectTag||tag==argsTag||isFunc&&!object){result=isFlat||isFunc?{}:initCloneObject(value);if(!isDeep){return isFlat?copySymbolsIn(value,baseAssignIn(result,value)):copySymbols(value,baseAssign(result,value));}}else{if(!cloneableTags[tag]){return object?value:{};}result=initCloneByTag(value,tag,baseClone,isDeep);}}// Check for circular references and return its corresponding clone.\nstack||(stack=new Stack());var stacked=stack.get(value);if(stacked){return stacked;}stack.set(value,result);var keysFunc=isFull?isFlat?getAllKeysIn:getAllKeys:isFlat?keysIn:keys;var props=isArr?undefined:keysFunc(value);arrayEach(props||value,function(subValue,key){if(props){key=subValue;subValue=value[key];}// Recursively populate clone (susceptible to call stack limits).\nassignValue(result,key,baseClone(subValue,bitmask,customizer,key,value,stack));});return result;}/**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */function baseConforms(source){var props=keys(source);return function(object){return baseConformsTo(object,source,props);};}/**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */function baseConformsTo(object,source,props){var length=props.length;if(object==null){return!length;}object=Object(object);while(length--){var key=props[length],predicate=source[key],value=object[key];if(value===undefined&&!(key in object)||!predicate(value)){return false;}}return true;}/**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */function baseDelay(func,wait,args){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}return setTimeout(function(){func.apply(undefined,args);},wait);}/**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */function baseDifference(array,values,iteratee,comparator){var index=-1,includes=arrayIncludes,isCommon=true,length=array.length,result=[],valuesLength=values.length;if(!length){return result;}if(iteratee){values=arrayMap(values,baseUnary(iteratee));}if(comparator){includes=arrayIncludesWith;isCommon=false;}else if(values.length>=LARGE_ARRAY_SIZE){includes=cacheHas;isCommon=false;values=new SetCache(values);}outer:while(++index<length){var value=array[index],computed=iteratee==null?value:iteratee(value);value=comparator||value!==0?value:0;if(isCommon&&computed===computed){var valuesIndex=valuesLength;while(valuesIndex--){if(values[valuesIndex]===computed){continue outer;}}result.push(value);}else if(!includes(values,computed,comparator)){result.push(value);}}return result;}/**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */var baseEach=createBaseEach(baseForOwn);/**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */var baseEachRight=createBaseEach(baseForOwnRight,true);/**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */function baseEvery(collection,predicate){var result=true;baseEach(collection,function(value,index,collection){result=!!predicate(value,index,collection);return result;});return result;}/**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */function baseExtremum(array,iteratee,comparator){var index=-1,length=array.length;while(++index<length){var value=array[index],current=iteratee(value);if(current!=null&&(computed===undefined?current===current&&!isSymbol(current):comparator(current,computed))){var computed=current,result=value;}}return result;}/**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */function baseFill(array,value,start,end){var length=array.length;start=toInteger(start);if(start<0){start=-start>length?0:length+start;}end=end===undefined||end>length?length:toInteger(end);if(end<0){end+=length;}end=start>end?0:toLength(end);while(start<end){array[start++]=value;}return array;}/**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */function baseFilter(collection,predicate){var result=[];baseEach(collection,function(value,index,collection){if(predicate(value,index,collection)){result.push(value);}});return result;}/**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */function baseFlatten(array,depth,predicate,isStrict,result){var index=-1,length=array.length;predicate||(predicate=isFlattenable);result||(result=[]);while(++index<length){var value=array[index];if(depth>0&&predicate(value)){if(depth>1){// Recursively flatten arrays (susceptible to call stack limits).\nbaseFlatten(value,depth-1,predicate,isStrict,result);}else{arrayPush(result,value);}}else if(!isStrict){result[result.length]=value;}}return result;}/**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */var baseFor=createBaseFor();/**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */var baseForRight=createBaseFor(true);/**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys);}/**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */function baseForOwnRight(object,iteratee){return object&&baseForRight(object,iteratee,keys);}/**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */function baseFunctions(object,props){return arrayFilter(props,function(key){return isFunction(object[key]);});}/**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */function baseGet(object,path){path=castPath(path,object);var index=0,length=path.length;while(object!=null&&index<length){object=object[toKey(path[index++])];}return index&&index==length?object:undefined;}/**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */function baseGetAllKeys(object,keysFunc,symbolsFunc){var result=keysFunc(object);return isArray(object)?result:arrayPush(result,symbolsFunc(object));}/**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */function baseGetTag(value){if(value==null){return value===undefined?undefinedTag:nullTag;}return symToStringTag&&symToStringTag in Object(value)?getRawTag(value):objectToString(value);}/**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */function baseGt(value,other){return value>other;}/**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */function baseHas(object,key){return object!=null&&hasOwnProperty.call(object,key);}/**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */function baseHasIn(object,key){return object!=null&&key in Object(object);}/**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */function baseInRange(number,start,end){return number>=nativeMin(start,end)&&number<nativeMax(start,end);}/**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */function baseIntersection(arrays,iteratee,comparator){var includes=comparator?arrayIncludesWith:arrayIncludes,length=arrays[0].length,othLength=arrays.length,othIndex=othLength,caches=Array(othLength),maxLength=Infinity,result=[];while(othIndex--){var array=arrays[othIndex];if(othIndex&&iteratee){array=arrayMap(array,baseUnary(iteratee));}maxLength=nativeMin(array.length,maxLength);caches[othIndex]=!comparator&&(iteratee||length>=120&&array.length>=120)?new SetCache(othIndex&&array):undefined;}array=arrays[0];var index=-1,seen=caches[0];outer:while(++index<length&&result.length<maxLength){var value=array[index],computed=iteratee?iteratee(value):value;value=comparator||value!==0?value:0;if(!(seen?cacheHas(seen,computed):includes(result,computed,comparator))){othIndex=othLength;while(--othIndex){var cache=caches[othIndex];if(!(cache?cacheHas(cache,computed):includes(arrays[othIndex],computed,comparator))){continue outer;}}if(seen){seen.push(computed);}result.push(value);}}return result;}/**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */function baseInverter(object,setter,iteratee,accumulator){baseForOwn(object,function(value,key,object){setter(accumulator,iteratee(value),key,object);});return accumulator;}/**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */function baseInvoke(object,path,args){path=castPath(path,object);object=parent(object,path);var func=object==null?object:object[toKey(last(path))];return func==null?undefined:apply(func,object,args);}/**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */function baseIsArguments(value){return isObjectLike(value)&&baseGetTag(value)==argsTag;}/**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */function baseIsArrayBuffer(value){return isObjectLike(value)&&baseGetTag(value)==arrayBufferTag;}/**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */function baseIsDate(value){return isObjectLike(value)&&baseGetTag(value)==dateTag;}/**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */function baseIsEqual(value,other,bitmask,customizer,stack){if(value===other){return true;}if(value==null||other==null||!isObjectLike(value)&&!isObjectLike(other)){return value!==value&&other!==other;}return baseIsEqualDeep(value,other,bitmask,customizer,baseIsEqual,stack);}/**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */function baseIsEqualDeep(object,other,bitmask,customizer,equalFunc,stack){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=objIsArr?arrayTag:getTag(object),othTag=othIsArr?arrayTag:getTag(other);objTag=objTag==argsTag?objectTag:objTag;othTag=othTag==argsTag?objectTag:othTag;var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&isBuffer(object)){if(!isBuffer(other)){return false;}objIsArr=true;objIsObj=false;}if(isSameTag&&!objIsObj){stack||(stack=new Stack());return objIsArr||isTypedArray(object)?equalArrays(object,other,bitmask,customizer,equalFunc,stack):equalByTag(object,other,objTag,bitmask,customizer,equalFunc,stack);}if(!(bitmask&COMPARE_PARTIAL_FLAG)){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,'__wrapped__'),othIsWrapped=othIsObj&&hasOwnProperty.call(other,'__wrapped__');if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object.value():object,othUnwrapped=othIsWrapped?other.value():other;stack||(stack=new Stack());return equalFunc(objUnwrapped,othUnwrapped,bitmask,customizer,stack);}}if(!isSameTag){return false;}stack||(stack=new Stack());return equalObjects(object,other,bitmask,customizer,equalFunc,stack);}/**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */function baseIsMap(value){return isObjectLike(value)&&getTag(value)==mapTag;}/**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */function baseIsMatch(object,source,matchData,customizer){var index=matchData.length,length=index,noCustomizer=!customizer;if(object==null){return!length;}object=Object(object);while(index--){var data=matchData[index];if(noCustomizer&&data[2]?data[1]!==object[data[0]]:!(data[0]in object)){return false;}}while(++index<length){data=matchData[index];var key=data[0],objValue=object[key],srcValue=data[1];if(noCustomizer&&data[2]){if(objValue===undefined&&!(key in object)){return false;}}else{var stack=new Stack();if(customizer){var result=customizer(objValue,srcValue,key,object,source,stack);}if(!(result===undefined?baseIsEqual(srcValue,objValue,COMPARE_PARTIAL_FLAG|COMPARE_UNORDERED_FLAG,customizer,stack):result)){return false;}}}return true;}/**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}var pattern=isFunction(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}/**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */function baseIsRegExp(value){return isObjectLike(value)&&baseGetTag(value)==regexpTag;}/**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */function baseIsSet(value){return isObjectLike(value)&&getTag(value)==setTag;}/**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[baseGetTag(value)];}/**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */function baseIteratee(value){// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n// See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\nif(typeof value=='function'){return value;}if(value==null){return identity;}if((typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))=='object'){return isArray(value)?baseMatchesProperty(value[0],value[1]):baseMatches(value);}return property(value);}/**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */function baseKeys(object){if(!isPrototype(object)){return nativeKeys(object);}var result=[];for(var key in Object(object)){if(hasOwnProperty.call(object,key)&&key!='constructor'){result.push(key);}}return result;}/**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */function baseKeysIn(object){if(!isObject(object)){return nativeKeysIn(object);}var isProto=isPrototype(object),result=[];for(var key in object){if(!(key=='constructor'&&(isProto||!hasOwnProperty.call(object,key)))){result.push(key);}}return result;}/**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */function baseLt(value,other){return value<other;}/**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */function baseMap(collection,iteratee){var index=-1,result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value,key,collection){result[++index]=iteratee(value,key,collection);});return result;}/**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */function baseMatches(source){var matchData=getMatchData(source);if(matchData.length==1&&matchData[0][2]){return matchesStrictComparable(matchData[0][0],matchData[0][1]);}return function(object){return object===source||baseIsMatch(object,source,matchData);};}/**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */function baseMatchesProperty(path,srcValue){if(isKey(path)&&isStrictComparable(srcValue)){return matchesStrictComparable(toKey(path),srcValue);}return function(object){var objValue=get(object,path);return objValue===undefined&&objValue===srcValue?hasIn(object,path):baseIsEqual(srcValue,objValue,COMPARE_PARTIAL_FLAG|COMPARE_UNORDERED_FLAG);};}/**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */function baseMerge(object,source,srcIndex,customizer,stack){if(object===source){return;}baseFor(source,function(srcValue,key){if(isObject(srcValue)){stack||(stack=new Stack());baseMergeDeep(object,source,key,srcIndex,baseMerge,customizer,stack);}else{var newValue=customizer?customizer(object[key],srcValue,key+'',object,source,stack):undefined;if(newValue===undefined){newValue=srcValue;}assignMergeValue(object,key,newValue);}},keysIn);}/**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */function baseMergeDeep(object,source,key,srcIndex,mergeFunc,customizer,stack){var objValue=object[key],srcValue=source[key],stacked=stack.get(srcValue);if(stacked){assignMergeValue(object,key,stacked);return;}var newValue=customizer?customizer(objValue,srcValue,key+'',object,source,stack):undefined;var isCommon=newValue===undefined;if(isCommon){var isArr=isArray(srcValue),isBuff=!isArr&&isBuffer(srcValue),isTyped=!isArr&&!isBuff&&isTypedArray(srcValue);newValue=srcValue;if(isArr||isBuff||isTyped){if(isArray(objValue)){newValue=objValue;}else if(isArrayLikeObject(objValue)){newValue=copyArray(objValue);}else if(isBuff){isCommon=false;newValue=cloneBuffer(srcValue,true);}else if(isTyped){isCommon=false;newValue=cloneTypedArray(srcValue,true);}else{newValue=[];}}else if(isPlainObject(srcValue)||isArguments(srcValue)){newValue=objValue;if(isArguments(objValue)){newValue=toPlainObject(objValue);}else if(!isObject(objValue)||srcIndex&&isFunction(objValue)){newValue=initCloneObject(srcValue);}}else{isCommon=false;}}if(isCommon){// Recursively merge objects and arrays (susceptible to call stack limits).\nstack.set(srcValue,newValue);mergeFunc(newValue,srcValue,srcIndex,customizer,stack);stack['delete'](srcValue);}assignMergeValue(object,key,newValue);}/**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */function baseNth(array,n){var length=array.length;if(!length){return;}n+=n<0?length:0;return isIndex(n,length)?array[n]:undefined;}/**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */function baseOrderBy(collection,iteratees,orders){var index=-1;iteratees=arrayMap(iteratees.length?iteratees:[identity],baseUnary(getIteratee()));var result=baseMap(collection,function(value,key,collection){var criteria=arrayMap(iteratees,function(iteratee){return iteratee(value);});return{'criteria':criteria,'index':++index,'value':value};});return baseSortBy(result,function(object,other){return compareMultiple(object,other,orders);});}/**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */function basePick(object,paths){return basePickBy(object,paths,function(value,path){return hasIn(object,path);});}/**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */function basePickBy(object,paths,predicate){var index=-1,length=paths.length,result={};while(++index<length){var path=paths[index],value=baseGet(object,path);if(predicate(value,path)){baseSet(result,castPath(path,object),value);}}return result;}/**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */function basePropertyDeep(path){return function(object){return baseGet(object,path);};}/**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */function basePullAll(array,values,iteratee,comparator){var indexOf=comparator?baseIndexOfWith:baseIndexOf,index=-1,length=values.length,seen=array;if(array===values){values=copyArray(values);}if(iteratee){seen=arrayMap(array,baseUnary(iteratee));}while(++index<length){var fromIndex=0,value=values[index],computed=iteratee?iteratee(value):value;while((fromIndex=indexOf(seen,computed,fromIndex,comparator))>-1){if(seen!==array){splice.call(seen,fromIndex,1);}splice.call(array,fromIndex,1);}}return array;}/**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */function basePullAt(array,indexes){var length=array?indexes.length:0,lastIndex=length-1;while(length--){var index=indexes[length];if(length==lastIndex||index!==previous){var previous=index;if(isIndex(index)){splice.call(array,index,1);}else{baseUnset(array,index);}}}return array;}/**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */function baseRandom(lower,upper){return lower+nativeFloor(nativeRandom()*(upper-lower+1));}/**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */function baseRange(start,end,step,fromRight){var index=-1,length=nativeMax(nativeCeil((end-start)/(step||1)),0),result=Array(length);while(length--){result[fromRight?length:++index]=start;start+=step;}return result;}/**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */function baseRepeat(string,n){var result='';if(!string||n<1||n>MAX_SAFE_INTEGER){return result;}// Leverage the exponentiation by squaring algorithm for a faster repeat.\n// See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\ndo{if(n%2){result+=string;}n=nativeFloor(n/2);if(n){string+=string;}}while(n);return result;}/**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */function baseRest(func,start){return setToString(overRest(func,start,identity),func+'');}/**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */function baseSample(collection){return arraySample(values(collection));}/**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */function baseSampleSize(collection,n){var array=values(collection);return shuffleSelf(array,baseClamp(n,0,array.length));}/**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */function baseSet(object,path,value,customizer){if(!isObject(object)){return object;}path=castPath(path,object);var index=-1,length=path.length,lastIndex=length-1,nested=object;while(nested!=null&&++index<length){var key=toKey(path[index]),newValue=value;if(index!=lastIndex){var objValue=nested[key];newValue=customizer?customizer(objValue,key,nested):undefined;if(newValue===undefined){newValue=isObject(objValue)?objValue:isIndex(path[index+1])?[]:{};}}assignValue(nested,key,newValue);nested=nested[key];}return object;}/**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */var baseSetData=!metaMap?identity:function(func,data){metaMap.set(func,data);return func;};/**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */var baseSetToString=!defineProperty?identity:function(func,string){return defineProperty(func,'toString',{'configurable':true,'enumerable':false,'value':constant(string),'writable':true});};/**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */function baseShuffle(collection){return shuffleSelf(values(collection));}/**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */function baseSlice(array,start,end){var index=-1,length=array.length;if(start<0){start=-start>length?0:length+start;}end=end>length?length:end;if(end<0){end+=length;}length=start>end?0:end-start>>>0;start>>>=0;var result=Array(length);while(++index<length){result[index]=array[index+start];}return result;}/**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */function baseSome(collection,predicate){var result;baseEach(collection,function(value,index,collection){result=predicate(value,index,collection);return!result;});return!!result;}/**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */function baseSortedIndex(array,value,retHighest){var low=0,high=array==null?low:array.length;if(typeof value=='number'&&value===value&&high<=HALF_MAX_ARRAY_LENGTH){while(low<high){var mid=low+high>>>1,computed=array[mid];if(computed!==null&&!isSymbol(computed)&&(retHighest?computed<=value:computed<value)){low=mid+1;}else{high=mid;}}return high;}return baseSortedIndexBy(array,value,identity,retHighest);}/**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */function baseSortedIndexBy(array,value,iteratee,retHighest){value=iteratee(value);var low=0,high=array==null?0:array.length,valIsNaN=value!==value,valIsNull=value===null,valIsSymbol=isSymbol(value),valIsUndefined=value===undefined;while(low<high){var mid=nativeFloor((low+high)/2),computed=iteratee(array[mid]),othIsDefined=computed!==undefined,othIsNull=computed===null,othIsReflexive=computed===computed,othIsSymbol=isSymbol(computed);if(valIsNaN){var setLow=retHighest||othIsReflexive;}else if(valIsUndefined){setLow=othIsReflexive&&(retHighest||othIsDefined);}else if(valIsNull){setLow=othIsReflexive&&othIsDefined&&(retHighest||!othIsNull);}else if(valIsSymbol){setLow=othIsReflexive&&othIsDefined&&!othIsNull&&(retHighest||!othIsSymbol);}else if(othIsNull||othIsSymbol){setLow=false;}else{setLow=retHighest?computed<=value:computed<value;}if(setLow){low=mid+1;}else{high=mid;}}return nativeMin(high,MAX_ARRAY_INDEX);}/**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */function baseSortedUniq(array,iteratee){var index=-1,length=array.length,resIndex=0,result=[];while(++index<length){var value=array[index],computed=iteratee?iteratee(value):value;if(!index||!eq(computed,seen)){var seen=computed;result[resIndex++]=value===0?0:value;}}return result;}/**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */function baseToNumber(value){if(typeof value=='number'){return value;}if(isSymbol(value)){return NAN;}return+value;}/**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */function baseToString(value){// Exit early for strings to avoid a performance hit in some environments.\nif(typeof value=='string'){return value;}if(isArray(value)){// Recursively convert values (susceptible to call stack limits).\nreturn arrayMap(value,baseToString)+'';}if(isSymbol(value)){return symbolToString?symbolToString.call(value):'';}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */function baseUniq(array,iteratee,comparator){var index=-1,includes=arrayIncludes,length=array.length,isCommon=true,result=[],seen=result;if(comparator){isCommon=false;includes=arrayIncludesWith;}else if(length>=LARGE_ARRAY_SIZE){var set=iteratee?null:createSet(array);if(set){return setToArray(set);}isCommon=false;includes=cacheHas;seen=new SetCache();}else{seen=iteratee?[]:result;}outer:while(++index<length){var value=array[index],computed=iteratee?iteratee(value):value;value=comparator||value!==0?value:0;if(isCommon&&computed===computed){var seenIndex=seen.length;while(seenIndex--){if(seen[seenIndex]===computed){continue outer;}}if(iteratee){seen.push(computed);}result.push(value);}else if(!includes(seen,computed,comparator)){if(seen!==result){seen.push(computed);}result.push(value);}}return result;}/**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */function baseUnset(object,path){path=castPath(path,object);object=parent(object,path);return object==null||delete object[toKey(last(path))];}/**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */function baseUpdate(object,path,updater,customizer){return baseSet(object,path,updater(baseGet(object,path)),customizer);}/**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */function baseWhile(array,predicate,isDrop,fromRight){var length=array.length,index=fromRight?length:-1;while((fromRight?index--:++index<length)&&predicate(array[index],index,array)){}return isDrop?baseSlice(array,fromRight?0:index,fromRight?index+1:length):baseSlice(array,fromRight?index+1:0,fromRight?length:index);}/**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */function baseWrapperValue(value,actions){var result=value;if(result instanceof LazyWrapper){result=result.value();}return arrayReduce(actions,function(result,action){return action.func.apply(action.thisArg,arrayPush([result],action.args));},result);}/**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */function baseXor(arrays,iteratee,comparator){var length=arrays.length;if(length<2){return length?baseUniq(arrays[0]):[];}var index=-1,result=Array(length);while(++index<length){var array=arrays[index],othIndex=-1;while(++othIndex<length){if(othIndex!=index){result[index]=baseDifference(result[index]||array,arrays[othIndex],iteratee,comparator);}}}return baseUniq(baseFlatten(result,1),iteratee,comparator);}/**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */function baseZipObject(props,values,assignFunc){var index=-1,length=props.length,valsLength=values.length,result={};while(++index<length){var value=index<valsLength?values[index]:undefined;assignFunc(result,props[index],value);}return result;}/**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */function castArrayLikeObject(value){return isArrayLikeObject(value)?value:[];}/**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */function castFunction(value){return typeof value=='function'?value:identity;}/**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */function castPath(value,object){if(isArray(value)){return value;}return isKey(value,object)?[value]:stringToPath(toString(value));}/**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */var castRest=baseRest;/**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */function castSlice(array,start,end){var length=array.length;end=end===undefined?length:end;return!start&&end>=length?array:baseSlice(array,start,end);}/**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */var clearTimeout=ctxClearTimeout||function(id){return root.clearTimeout(id);};/**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */function cloneBuffer(buffer,isDeep){if(isDeep){return buffer.slice();}var length=buffer.length,result=allocUnsafe?allocUnsafe(length):new buffer.constructor(length);buffer.copy(result);return result;}/**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */function cloneArrayBuffer(arrayBuffer){var result=new arrayBuffer.constructor(arrayBuffer.byteLength);new Uint8Array(result).set(new Uint8Array(arrayBuffer));return result;}/**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */function cloneDataView(dataView,isDeep){var buffer=isDeep?cloneArrayBuffer(dataView.buffer):dataView.buffer;return new dataView.constructor(buffer,dataView.byteOffset,dataView.byteLength);}/**\n     * Creates a clone of `map`.\n     *\n     * @private\n     * @param {Object} map The map to clone.\n     * @param {Function} cloneFunc The function to clone values.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned map.\n     */function cloneMap(map,isDeep,cloneFunc){var array=isDeep?cloneFunc(mapToArray(map),CLONE_DEEP_FLAG):mapToArray(map);return arrayReduce(array,addMapEntry,new map.constructor());}/**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */function cloneRegExp(regexp){var result=new regexp.constructor(regexp.source,reFlags.exec(regexp));result.lastIndex=regexp.lastIndex;return result;}/**\n     * Creates a clone of `set`.\n     *\n     * @private\n     * @param {Object} set The set to clone.\n     * @param {Function} cloneFunc The function to clone values.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned set.\n     */function cloneSet(set,isDeep,cloneFunc){var array=isDeep?cloneFunc(setToArray(set),CLONE_DEEP_FLAG):setToArray(set);return arrayReduce(array,addSetEntry,new set.constructor());}/**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */function cloneSymbol(symbol){return symbolValueOf?Object(symbolValueOf.call(symbol)):{};}/**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */function cloneTypedArray(typedArray,isDeep){var buffer=isDeep?cloneArrayBuffer(typedArray.buffer):typedArray.buffer;return new typedArray.constructor(buffer,typedArray.byteOffset,typedArray.length);}/**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */function compareAscending(value,other){if(value!==other){var valIsDefined=value!==undefined,valIsNull=value===null,valIsReflexive=value===value,valIsSymbol=isSymbol(value);var othIsDefined=other!==undefined,othIsNull=other===null,othIsReflexive=other===other,othIsSymbol=isSymbol(other);if(!othIsNull&&!othIsSymbol&&!valIsSymbol&&value>other||valIsSymbol&&othIsDefined&&othIsReflexive&&!othIsNull&&!othIsSymbol||valIsNull&&othIsDefined&&othIsReflexive||!valIsDefined&&othIsReflexive||!valIsReflexive){return 1;}if(!valIsNull&&!valIsSymbol&&!othIsSymbol&&value<other||othIsSymbol&&valIsDefined&&valIsReflexive&&!valIsNull&&!valIsSymbol||othIsNull&&valIsDefined&&valIsReflexive||!othIsDefined&&valIsReflexive||!othIsReflexive){return-1;}}return 0;}/**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */function compareMultiple(object,other,orders){var index=-1,objCriteria=object.criteria,othCriteria=other.criteria,length=objCriteria.length,ordersLength=orders.length;while(++index<length){var result=compareAscending(objCriteria[index],othCriteria[index]);if(result){if(index>=ordersLength){return result;}var order=orders[index];return result*(order=='desc'?-1:1);}}// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n// that causes it, under certain circumstances, to provide the same value for\n// `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n// for more details.\n//\n// This also ensures a stable sort in V8 and other engines.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\nreturn object.index-other.index;}/**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */function composeArgs(args,partials,holders,isCurried){var argsIndex=-1,argsLength=args.length,holdersLength=holders.length,leftIndex=-1,leftLength=partials.length,rangeLength=nativeMax(argsLength-holdersLength,0),result=Array(leftLength+rangeLength),isUncurried=!isCurried;while(++leftIndex<leftLength){result[leftIndex]=partials[leftIndex];}while(++argsIndex<holdersLength){if(isUncurried||argsIndex<argsLength){result[holders[argsIndex]]=args[argsIndex];}}while(rangeLength--){result[leftIndex++]=args[argsIndex++];}return result;}/**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */function composeArgsRight(args,partials,holders,isCurried){var argsIndex=-1,argsLength=args.length,holdersIndex=-1,holdersLength=holders.length,rightIndex=-1,rightLength=partials.length,rangeLength=nativeMax(argsLength-holdersLength,0),result=Array(rangeLength+rightLength),isUncurried=!isCurried;while(++argsIndex<rangeLength){result[argsIndex]=args[argsIndex];}var offset=argsIndex;while(++rightIndex<rightLength){result[offset+rightIndex]=partials[rightIndex];}while(++holdersIndex<holdersLength){if(isUncurried||argsIndex<argsLength){result[offset+holders[holdersIndex]]=args[argsIndex++];}}return result;}/**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */function copyArray(source,array){var index=-1,length=source.length;array||(array=Array(length));while(++index<length){array[index]=source[index];}return array;}/**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */function copyObject(source,props,object,customizer){var isNew=!object;object||(object={});var index=-1,length=props.length;while(++index<length){var key=props[index];var newValue=customizer?customizer(object[key],source[key],key,object,source):undefined;if(newValue===undefined){newValue=source[key];}if(isNew){baseAssignValue(object,key,newValue);}else{assignValue(object,key,newValue);}}return object;}/**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */function copySymbols(source,object){return copyObject(source,getSymbols(source),object);}/**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */function copySymbolsIn(source,object){return copyObject(source,getSymbolsIn(source),object);}/**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */function createAggregator(setter,initializer){return function(collection,iteratee){var func=isArray(collection)?arrayAggregator:baseAggregator,accumulator=initializer?initializer():{};return func(collection,setter,getIteratee(iteratee,2),accumulator);};}/**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */function createAssigner(assigner){return baseRest(function(object,sources){var index=-1,length=sources.length,customizer=length>1?sources[length-1]:undefined,guard=length>2?sources[2]:undefined;customizer=assigner.length>3&&typeof customizer=='function'?(length--,customizer):undefined;if(guard&&isIterateeCall(sources[0],sources[1],guard)){customizer=length<3?undefined:customizer;length=1;}object=Object(object);while(++index<length){var source=sources[index];if(source){assigner(object,source,index,customizer);}}return object;});}/**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){if(collection==null){return collection;}if(!isArrayLike(collection)){return eachFunc(collection,iteratee);}var length=collection.length,index=fromRight?length:-1,iterable=Object(collection);while(fromRight?index--:++index<length){if(iteratee(iterable[index],index,iterable)===false){break;}}return collection;};}/**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */function createBaseFor(fromRight){return function(object,iteratee,keysFunc){var index=-1,iterable=Object(object),props=keysFunc(object),length=props.length;while(length--){var key=props[fromRight?length:++index];if(iteratee(iterable[key],key,iterable)===false){break;}}return object;};}/**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */function createBind(func,bitmask,thisArg){var isBind=bitmask&WRAP_BIND_FLAG,Ctor=createCtor(func);function wrapper(){var fn=this&&this!==root&&this instanceof wrapper?Ctor:func;return fn.apply(isBind?thisArg:this,arguments);}return wrapper;}/**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */function createCaseFirst(methodName){return function(string){string=toString(string);var strSymbols=hasUnicode(string)?stringToArray(string):undefined;var chr=strSymbols?strSymbols[0]:string.charAt(0);var trailing=strSymbols?castSlice(strSymbols,1).join(''):string.slice(1);return chr[methodName]()+trailing;};}/**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */function createCompounder(callback){return function(string){return arrayReduce(words(deburr(string).replace(reApos,'')),callback,'');};}/**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */function createCtor(Ctor){return function(){// Use a `switch` statement to work with class constructors. See\n// http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n// for more details.\nvar args=arguments;switch(args.length){case 0:return new Ctor();case 1:return new Ctor(args[0]);case 2:return new Ctor(args[0],args[1]);case 3:return new Ctor(args[0],args[1],args[2]);case 4:return new Ctor(args[0],args[1],args[2],args[3]);case 5:return new Ctor(args[0],args[1],args[2],args[3],args[4]);case 6:return new Ctor(args[0],args[1],args[2],args[3],args[4],args[5]);case 7:return new Ctor(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);}var thisBinding=baseCreate(Ctor.prototype),result=Ctor.apply(thisBinding,args);// Mimic the constructor's `return` behavior.\n// See https://es5.github.io/#x13.2.2 for more details.\nreturn isObject(result)?result:thisBinding;};}/**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */function createCurry(func,bitmask,arity){var Ctor=createCtor(func);function wrapper(){var length=arguments.length,args=Array(length),index=length,placeholder=getHolder(wrapper);while(index--){args[index]=arguments[index];}var holders=length<3&&args[0]!==placeholder&&args[length-1]!==placeholder?[]:replaceHolders(args,placeholder);length-=holders.length;if(length<arity){return createRecurry(func,bitmask,createHybrid,wrapper.placeholder,undefined,args,holders,undefined,undefined,arity-length);}var fn=this&&this!==root&&this instanceof wrapper?Ctor:func;return apply(fn,this,args);}return wrapper;}/**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */function createFind(findIndexFunc){return function(collection,predicate,fromIndex){var iterable=Object(collection);if(!isArrayLike(collection)){var iteratee=getIteratee(predicate,3);collection=keys(collection);predicate=function predicate(key){return iteratee(iterable[key],key,iterable);};}var index=findIndexFunc(collection,predicate,fromIndex);return index>-1?iterable[iteratee?collection[index]:index]:undefined;};}/**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */function createFlow(fromRight){return flatRest(function(funcs){var length=funcs.length,index=length,prereq=LodashWrapper.prototype.thru;if(fromRight){funcs.reverse();}while(index--){var func=funcs[index];if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}if(prereq&&!wrapper&&getFuncName(func)=='wrapper'){var wrapper=new LodashWrapper([],true);}}index=wrapper?index:length;while(++index<length){func=funcs[index];var funcName=getFuncName(func),data=funcName=='wrapper'?getData(func):undefined;if(data&&isLaziable(data[0])&&data[1]==(WRAP_ARY_FLAG|WRAP_CURRY_FLAG|WRAP_PARTIAL_FLAG|WRAP_REARG_FLAG)&&!data[4].length&&data[9]==1){wrapper=wrapper[getFuncName(data[0])].apply(wrapper,data[3]);}else{wrapper=func.length==1&&isLaziable(func)?wrapper[funcName]():wrapper.thru(func);}}return function(){var args=arguments,value=args[0];if(wrapper&&args.length==1&&isArray(value)){return wrapper.plant(value).value();}var index=0,result=length?funcs[index].apply(this,args):value;while(++index<length){result=funcs[index].call(this,result);}return result;};});}/**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */function createHybrid(func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity){var isAry=bitmask&WRAP_ARY_FLAG,isBind=bitmask&WRAP_BIND_FLAG,isBindKey=bitmask&WRAP_BIND_KEY_FLAG,isCurried=bitmask&(WRAP_CURRY_FLAG|WRAP_CURRY_RIGHT_FLAG),isFlip=bitmask&WRAP_FLIP_FLAG,Ctor=isBindKey?undefined:createCtor(func);function wrapper(){var length=arguments.length,args=Array(length),index=length;while(index--){args[index]=arguments[index];}if(isCurried){var placeholder=getHolder(wrapper),holdersCount=countHolders(args,placeholder);}if(partials){args=composeArgs(args,partials,holders,isCurried);}if(partialsRight){args=composeArgsRight(args,partialsRight,holdersRight,isCurried);}length-=holdersCount;if(isCurried&&length<arity){var newHolders=replaceHolders(args,placeholder);return createRecurry(func,bitmask,createHybrid,wrapper.placeholder,thisArg,args,newHolders,argPos,ary,arity-length);}var thisBinding=isBind?thisArg:this,fn=isBindKey?thisBinding[func]:func;length=args.length;if(argPos){args=reorder(args,argPos);}else if(isFlip&&length>1){args.reverse();}if(isAry&&ary<length){args.length=ary;}if(this&&this!==root&&this instanceof wrapper){fn=Ctor||createCtor(fn);}return fn.apply(thisBinding,args);}return wrapper;}/**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */function createInverter(setter,toIteratee){return function(object,iteratee){return baseInverter(object,setter,toIteratee(iteratee),{});};}/**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */function createMathOperation(operator,defaultValue){return function(value,other){var result;if(value===undefined&&other===undefined){return defaultValue;}if(value!==undefined){result=value;}if(other!==undefined){if(result===undefined){return other;}if(typeof value=='string'||typeof other=='string'){value=baseToString(value);other=baseToString(other);}else{value=baseToNumber(value);other=baseToNumber(other);}result=operator(value,other);}return result;};}/**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */function createOver(arrayFunc){return flatRest(function(iteratees){iteratees=arrayMap(iteratees,baseUnary(getIteratee()));return baseRest(function(args){var thisArg=this;return arrayFunc(iteratees,function(iteratee){return apply(iteratee,thisArg,args);});});});}/**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */function createPadding(length,chars){chars=chars===undefined?' ':baseToString(chars);var charsLength=chars.length;if(charsLength<2){return charsLength?baseRepeat(chars,length):chars;}var result=baseRepeat(chars,nativeCeil(length/stringSize(chars)));return hasUnicode(chars)?castSlice(stringToArray(result),0,length).join(''):result.slice(0,length);}/**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */function createPartial(func,bitmask,thisArg,partials){var isBind=bitmask&WRAP_BIND_FLAG,Ctor=createCtor(func);function wrapper(){var argsIndex=-1,argsLength=arguments.length,leftIndex=-1,leftLength=partials.length,args=Array(leftLength+argsLength),fn=this&&this!==root&&this instanceof wrapper?Ctor:func;while(++leftIndex<leftLength){args[leftIndex]=partials[leftIndex];}while(argsLength--){args[leftIndex++]=arguments[++argsIndex];}return apply(fn,isBind?thisArg:this,args);}return wrapper;}/**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */function createRange(fromRight){return function(start,end,step){if(step&&typeof step!='number'&&isIterateeCall(start,end,step)){end=step=undefined;}// Ensure the sign of `-0` is preserved.\nstart=toFinite(start);if(end===undefined){end=start;start=0;}else{end=toFinite(end);}step=step===undefined?start<end?1:-1:toFinite(step);return baseRange(start,end,step,fromRight);};}/**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */function createRelationalOperation(operator){return function(value,other){if(!(typeof value=='string'&&typeof other=='string')){value=toNumber(value);other=toNumber(other);}return operator(value,other);};}/**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */function createRecurry(func,bitmask,wrapFunc,placeholder,thisArg,partials,holders,argPos,ary,arity){var isCurry=bitmask&WRAP_CURRY_FLAG,newHolders=isCurry?holders:undefined,newHoldersRight=isCurry?undefined:holders,newPartials=isCurry?partials:undefined,newPartialsRight=isCurry?undefined:partials;bitmask|=isCurry?WRAP_PARTIAL_FLAG:WRAP_PARTIAL_RIGHT_FLAG;bitmask&=~(isCurry?WRAP_PARTIAL_RIGHT_FLAG:WRAP_PARTIAL_FLAG);if(!(bitmask&WRAP_CURRY_BOUND_FLAG)){bitmask&=~(WRAP_BIND_FLAG|WRAP_BIND_KEY_FLAG);}var newData=[func,bitmask,thisArg,newPartials,newHolders,newPartialsRight,newHoldersRight,argPos,ary,arity];var result=wrapFunc.apply(undefined,newData);if(isLaziable(func)){setData(result,newData);}result.placeholder=placeholder;return setWrapToString(result,func,bitmask);}/**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */function createRound(methodName){var func=Math[methodName];return function(number,precision){number=toNumber(number);precision=precision==null?0:nativeMin(toInteger(precision),292);if(precision){// Shift with exponential notation to avoid floating-point issues.\n// See [MDN](https://mdn.io/round#Examples) for more details.\nvar pair=(toString(number)+'e').split('e'),value=func(pair[0]+'e'+(+pair[1]+precision));pair=(toString(value)+'e').split('e');return+(pair[0]+'e'+(+pair[1]-precision));}return func(number);};}/**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */var createSet=!(Set&&1/setToArray(new Set([,-0]))[1]==INFINITY)?noop:function(values){return new Set(values);};/**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */function createToPairs(keysFunc){return function(object){var tag=getTag(object);if(tag==mapTag){return mapToArray(object);}if(tag==setTag){return setToPairs(object);}return baseToPairs(object,keysFunc(object));};}/**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */function createWrap(func,bitmask,thisArg,partials,holders,argPos,ary,arity){var isBindKey=bitmask&WRAP_BIND_KEY_FLAG;if(!isBindKey&&typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}var length=partials?partials.length:0;if(!length){bitmask&=~(WRAP_PARTIAL_FLAG|WRAP_PARTIAL_RIGHT_FLAG);partials=holders=undefined;}ary=ary===undefined?ary:nativeMax(toInteger(ary),0);arity=arity===undefined?arity:toInteger(arity);length-=holders?holders.length:0;if(bitmask&WRAP_PARTIAL_RIGHT_FLAG){var partialsRight=partials,holdersRight=holders;partials=holders=undefined;}var data=isBindKey?undefined:getData(func);var newData=[func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity];if(data){mergeData(newData,data);}func=newData[0];bitmask=newData[1];thisArg=newData[2];partials=newData[3];holders=newData[4];arity=newData[9]=newData[9]===undefined?isBindKey?0:func.length:nativeMax(newData[9]-length,0);if(!arity&&bitmask&(WRAP_CURRY_FLAG|WRAP_CURRY_RIGHT_FLAG)){bitmask&=~(WRAP_CURRY_FLAG|WRAP_CURRY_RIGHT_FLAG);}if(!bitmask||bitmask==WRAP_BIND_FLAG){var result=createBind(func,bitmask,thisArg);}else if(bitmask==WRAP_CURRY_FLAG||bitmask==WRAP_CURRY_RIGHT_FLAG){result=createCurry(func,bitmask,arity);}else if((bitmask==WRAP_PARTIAL_FLAG||bitmask==(WRAP_BIND_FLAG|WRAP_PARTIAL_FLAG))&&!holders.length){result=createPartial(func,bitmask,thisArg,partials);}else{result=createHybrid.apply(undefined,newData);}var setter=data?baseSetData:setData;return setWrapToString(setter(result,newData),func,bitmask);}/**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */function customDefaultsAssignIn(objValue,srcValue,key,object){if(objValue===undefined||eq(objValue,objectProto[key])&&!hasOwnProperty.call(object,key)){return srcValue;}return objValue;}/**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */function customDefaultsMerge(objValue,srcValue,key,object,source,stack){if(isObject(objValue)&&isObject(srcValue)){// Recursively merge objects and arrays (susceptible to call stack limits).\nstack.set(srcValue,objValue);baseMerge(objValue,srcValue,undefined,customDefaultsMerge,stack);stack['delete'](srcValue);}return objValue;}/**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */function customOmitClone(value){return isPlainObject(value)?undefined:value;}/**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */function equalArrays(array,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false;}// Assume cyclic values are equal.\nvar stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other;}var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache():undefined;stack.set(array,other);stack.set(other,array);// Ignore non-index properties.\nwhile(++index<arrLength){var arrValue=array[index],othValue=other[index];if(customizer){var compared=isPartial?customizer(othValue,arrValue,index,other,array,stack):customizer(arrValue,othValue,index,array,other,stack);}if(compared!==undefined){if(compared){continue;}result=false;break;}// Recursively compare arrays (susceptible to call stack limits).\nif(seen){if(!arraySome(other,function(othValue,othIndex){if(!cacheHas(seen,othIndex)&&(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){return seen.push(othIndex);}})){result=false;break;}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){result=false;break;}}stack['delete'](array);stack['delete'](other);return result;}/**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */function equalByTag(object,other,tag,bitmask,customizer,equalFunc,stack){switch(tag){case dataViewTag:if(object.byteLength!=other.byteLength||object.byteOffset!=other.byteOffset){return false;}object=object.buffer;other=other.buffer;case arrayBufferTag:if(object.byteLength!=other.byteLength||!equalFunc(new Uint8Array(object),new Uint8Array(other))){return false;}return true;case boolTag:case dateTag:case numberTag:// Coerce booleans to `1` or `0` and dates to milliseconds.\n// Invalid dates are coerced to `NaN`.\nreturn eq(+object,+other);case errorTag:return object.name==other.name&&object.message==other.message;case regexpTag:case stringTag:// Coerce regexes to strings and treat strings, primitives and objects,\n// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n// for more details.\nreturn object==other+'';case mapTag:var convert=mapToArray;case setTag:var isPartial=bitmask&COMPARE_PARTIAL_FLAG;convert||(convert=setToArray);if(object.size!=other.size&&!isPartial){return false;}// Assume cyclic values are equal.\nvar stacked=stack.get(object);if(stacked){return stacked==other;}bitmask|=COMPARE_UNORDERED_FLAG;// Recursively compare objects (susceptible to call stack limits).\nstack.set(object,other);var result=equalArrays(convert(object),convert(other),bitmask,customizer,equalFunc,stack);stack['delete'](object);return result;case symbolTag:if(symbolValueOf){return symbolValueOf.call(object)==symbolValueOf.call(other);}}return false;}/**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */function equalObjects(object,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,objProps=getAllKeys(object),objLength=objProps.length,othProps=getAllKeys(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial){return false;}var index=objLength;while(index--){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty.call(other,key))){return false;}}// Assume cyclic values are equal.\nvar stacked=stack.get(object);if(stacked&&stack.get(other)){return stacked==other;}var result=true;stack.set(object,other);stack.set(other,object);var skipCtor=isPartial;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key];if(customizer){var compared=isPartial?customizer(othValue,objValue,key,other,object,stack):customizer(objValue,othValue,key,object,other,stack);}// Recursively compare objects (susceptible to call stack limits).\nif(!(compared===undefined?objValue===othValue||equalFunc(objValue,othValue,bitmask,customizer,stack):compared)){result=false;break;}skipCtor||(skipCtor=key=='constructor');}if(result&&!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;// Non `Object` object instances with different constructors are not equal.\nif(objCtor!=othCtor&&'constructor'in object&&'constructor'in other&&!(typeof objCtor=='function'&&objCtor instanceof objCtor&&typeof othCtor=='function'&&othCtor instanceof othCtor)){result=false;}}stack['delete'](object);stack['delete'](other);return result;}/**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */function flatRest(func){return setToString(overRest(func,undefined,flatten),func+'');}/**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */function getAllKeys(object){return baseGetAllKeys(object,keys,getSymbols);}/**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */function getAllKeysIn(object){return baseGetAllKeys(object,keysIn,getSymbolsIn);}/**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */var getData=!metaMap?noop:function(func){return metaMap.get(func);};/**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */function getFuncName(func){var result=func.name+'',array=realNames[result],length=hasOwnProperty.call(realNames,result)?array.length:0;while(length--){var data=array[length],otherFunc=data.func;if(otherFunc==null||otherFunc==func){return data.name;}}return result;}/**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */function getHolder(func){var object=hasOwnProperty.call(lodash,'placeholder')?lodash:func;return object.placeholder;}/**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */function getIteratee(){var result=lodash.iteratee||iteratee;result=result===iteratee?baseIteratee:result;return arguments.length?result(arguments[0],arguments[1]):result;}/**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=='string'?'string':'hash']:data.map;}/**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */function getMatchData(object){var result=keys(object),length=result.length;while(length--){var key=result[length],value=object[key];result[length]=[key,value,isStrictComparable(value)];}return result;}/**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}/**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */function getRawTag(value){var isOwn=hasOwnProperty.call(value,symToStringTag),tag=value[symToStringTag];try{value[symToStringTag]=undefined;var unmasked=true;}catch(e){}var result=nativeObjectToString.call(value);if(unmasked){if(isOwn){value[symToStringTag]=tag;}else{delete value[symToStringTag];}}return result;}/**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */var getSymbols=!nativeGetSymbols?stubArray:function(object){if(object==null){return[];}object=Object(object);return arrayFilter(nativeGetSymbols(object),function(symbol){return propertyIsEnumerable.call(object,symbol);});};/**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */var getSymbolsIn=!nativeGetSymbols?stubArray:function(object){var result=[];while(object){arrayPush(result,getSymbols(object));object=getPrototype(object);}return result;};/**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */var getTag=baseGetTag;// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map())!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set())!=setTag||WeakMap&&getTag(new WeakMap())!=weakMapTag){getTag=function getTag(value){var result=baseGetTag(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):'';if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag;}}return result;};}/**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */function getView(start,end,transforms){var index=-1,length=transforms.length;while(++index<length){var data=transforms[index],size=data.size;switch(data.type){case'drop':start+=size;break;case'dropRight':end-=size;break;case'take':end=nativeMin(end,start+size);break;case'takeRight':start=nativeMax(start,end-size);break;}}return{'start':start,'end':end};}/**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */function getWrapDetails(source){var match=source.match(reWrapDetails);return match?match[1].split(reSplitDetails):[];}/**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */function hasPath(object,path,hasFunc){path=castPath(path,object);var index=-1,length=path.length,result=false;while(++index<length){var key=toKey(path[index]);if(!(result=object!=null&&hasFunc(object,key))){break;}object=object[key];}if(result||++index!=length){return result;}length=object==null?0:object.length;return!!length&&isLength(length)&&isIndex(key,length)&&(isArray(object)||isArguments(object));}/**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */function initCloneArray(array){var length=array.length,result=array.constructor(length);// Add properties assigned by `RegExp#exec`.\nif(length&&typeof array[0]=='string'&&hasOwnProperty.call(array,'index')){result.index=array.index;result.input=array.input;}return result;}/**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */function initCloneObject(object){return typeof object.constructor=='function'&&!isPrototype(object)?baseCreate(getPrototype(object)):{};}/**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {Function} cloneFunc The function to clone values.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */function initCloneByTag(object,tag,cloneFunc,isDeep){var Ctor=object.constructor;switch(tag){case arrayBufferTag:return cloneArrayBuffer(object);case boolTag:case dateTag:return new Ctor(+object);case dataViewTag:return cloneDataView(object,isDeep);case float32Tag:case float64Tag:case int8Tag:case int16Tag:case int32Tag:case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:return cloneTypedArray(object,isDeep);case mapTag:return cloneMap(object,isDeep,cloneFunc);case numberTag:case stringTag:return new Ctor(object);case regexpTag:return cloneRegExp(object);case setTag:return cloneSet(object,isDeep,cloneFunc);case symbolTag:return cloneSymbol(object);}}/**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */function insertWrapDetails(source,details){var length=details.length;if(!length){return source;}var lastIndex=length-1;details[lastIndex]=(length>1?'& ':'')+details[lastIndex];details=details.join(length>2?', ':' ');return source.replace(reWrapComment,'{\\n/* [wrapped with '+details+'] */\\n');}/**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */function isFlattenable(value){return isArray(value)||isArguments(value)||!!(spreadableSymbol&&value&&value[spreadableSymbol]);}/**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */function isIndex(value,length){length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(typeof value=='number'||reIsUint.test(value))&&value>-1&&value%1==0&&value<length;}/**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */function isIterateeCall(value,index,object){if(!isObject(object)){return false;}var type=typeof index===\"undefined\"?\"undefined\":(0,_typeof6.default)(index);if(type=='number'?isArrayLike(object)&&isIndex(index,object.length):type=='string'&&index in object){return eq(object[index],value);}return false;}/**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */function isKey(value,object){if(isArray(value)){return false;}var type=typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value);if(type=='number'||type=='symbol'||type=='boolean'||value==null||isSymbol(value)){return true;}return reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object!=null&&value in Object(object);}/**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */function isKeyable(value){var type=typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value);return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}/**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */function isLaziable(func){var funcName=getFuncName(func),other=lodash[funcName];if(typeof other!='function'||!(funcName in LazyWrapper.prototype)){return false;}if(func===other){return true;}var data=getData(other);return!!data&&func===data[0];}/**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}/**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */var isMaskable=coreJsData?isFunction:stubFalse;/**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor=='function'&&Ctor.prototype||objectProto;return value===proto;}/**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */function isStrictComparable(value){return value===value&&!isObject(value);}/**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */function matchesStrictComparable(key,srcValue){return function(object){if(object==null){return false;}return object[key]===srcValue&&(srcValue!==undefined||key in Object(object));};}/**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */function memoizeCapped(func){var result=memoize(func,function(key){if(cache.size===MAX_MEMOIZE_SIZE){cache.clear();}return key;});var cache=result.cache;return result;}/**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */function mergeData(data,source){var bitmask=data[1],srcBitmask=source[1],newBitmask=bitmask|srcBitmask,isCommon=newBitmask<(WRAP_BIND_FLAG|WRAP_BIND_KEY_FLAG|WRAP_ARY_FLAG);var isCombo=srcBitmask==WRAP_ARY_FLAG&&bitmask==WRAP_CURRY_FLAG||srcBitmask==WRAP_ARY_FLAG&&bitmask==WRAP_REARG_FLAG&&data[7].length<=source[8]||srcBitmask==(WRAP_ARY_FLAG|WRAP_REARG_FLAG)&&source[7].length<=source[8]&&bitmask==WRAP_CURRY_FLAG;// Exit early if metadata can't be merged.\nif(!(isCommon||isCombo)){return data;}// Use source `thisArg` if available.\nif(srcBitmask&WRAP_BIND_FLAG){data[2]=source[2];// Set when currying a bound function.\nnewBitmask|=bitmask&WRAP_BIND_FLAG?0:WRAP_CURRY_BOUND_FLAG;}// Compose partial arguments.\nvar value=source[3];if(value){var partials=data[3];data[3]=partials?composeArgs(partials,value,source[4]):value;data[4]=partials?replaceHolders(data[3],PLACEHOLDER):source[4];}// Compose partial right arguments.\nvalue=source[5];if(value){partials=data[5];data[5]=partials?composeArgsRight(partials,value,source[6]):value;data[6]=partials?replaceHolders(data[5],PLACEHOLDER):source[6];}// Use source `argPos` if available.\nvalue=source[7];if(value){data[7]=value;}// Use source `ary` if it's smaller.\nif(srcBitmask&WRAP_ARY_FLAG){data[8]=data[8]==null?source[8]:nativeMin(data[8],source[8]);}// Use source `arity` if one is not provided.\nif(data[9]==null){data[9]=source[9];}// Use source `func` and merge bitmasks.\ndata[0]=source[0];data[1]=newBitmask;return data;}/**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */function nativeKeysIn(object){var result=[];if(object!=null){for(var key in Object(object)){result.push(key);}}return result;}/**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */function objectToString(value){return nativeObjectToString.call(value);}/**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */function overRest(func,start,transform){start=nativeMax(start===undefined?func.length-1:start,0);return function(){var args=arguments,index=-1,length=nativeMax(args.length-start,0),array=Array(length);while(++index<length){array[index]=args[start+index];}index=-1;var otherArgs=Array(start+1);while(++index<start){otherArgs[index]=args[index];}otherArgs[start]=transform(array);return apply(func,this,otherArgs);};}/**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */function parent(object,path){return path.length<2?object:baseGet(object,baseSlice(path,0,-1));}/**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */function reorder(array,indexes){var arrLength=array.length,length=nativeMin(indexes.length,arrLength),oldArray=copyArray(array);while(length--){var index=indexes[length];array[length]=isIndex(index,arrLength)?oldArray[index]:undefined;}return array;}/**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */var setData=shortOut(baseSetData);/**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */var setTimeout=ctxSetTimeout||function(func,wait){return root.setTimeout(func,wait);};/**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */var setToString=shortOut(baseSetToString);/**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */function setWrapToString(wrapper,reference,bitmask){var source=reference+'';return setToString(wrapper,insertWrapDetails(source,updateWrapDetails(getWrapDetails(source),bitmask)));}/**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */function shortOut(func){var count=0,lastCalled=0;return function(){var stamp=nativeNow(),remaining=HOT_SPAN-(stamp-lastCalled);lastCalled=stamp;if(remaining>0){if(++count>=HOT_COUNT){return arguments[0];}}else{count=0;}return func.apply(undefined,arguments);};}/**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */function shuffleSelf(array,size){var index=-1,length=array.length,lastIndex=length-1;size=size===undefined?length:size;while(++index<size){var rand=baseRandom(index,lastIndex),value=array[rand];array[rand]=array[index];array[index]=value;}array.length=size;return array;}/**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */var stringToPath=memoizeCapped(function(string){var result=[];if(reLeadingDot.test(string)){result.push('');}string.replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,'$1'):number||match);});return result;});/**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */function toKey(value){if(typeof value=='string'||isSymbol(value)){return value;}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}try{return func+'';}catch(e){}}return'';}/**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */function updateWrapDetails(details,bitmask){arrayEach(wrapFlags,function(pair){var value='_.'+pair[0];if(bitmask&pair[1]&&!arrayIncludes(details,value)){details.push(value);}});return details.sort();}/**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */function wrapperClone(wrapper){if(wrapper instanceof LazyWrapper){return wrapper.clone();}var result=new LodashWrapper(wrapper.__wrapped__,wrapper.__chain__);result.__actions__=copyArray(wrapper.__actions__);result.__index__=wrapper.__index__;result.__values__=wrapper.__values__;return result;}/*------------------------------------------------------------------------*//**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */function chunk(array,size,guard){if(guard?isIterateeCall(array,size,guard):size===undefined){size=1;}else{size=nativeMax(toInteger(size),0);}var length=array==null?0:array.length;if(!length||size<1){return[];}var index=0,resIndex=0,result=Array(nativeCeil(length/size));while(index<length){result[resIndex++]=baseSlice(array,index,index+=size);}return result;}/**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */function compact(array){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(value){result[resIndex++]=value;}}return result;}/**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */function concat(){var length=arguments.length;if(!length){return[];}var args=Array(length-1),array=arguments[0],index=length;while(index--){args[index-1]=arguments[index];}return arrayPush(isArray(array)?copyArray(array):[array],baseFlatten(args,1));}/**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */var difference=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true)):[];});/**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */var differenceBy=baseRest(function(array,values){var iteratee=last(values);if(isArrayLikeObject(iteratee)){iteratee=undefined;}return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true),getIteratee(iteratee,2)):[];});/**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */var differenceWith=baseRest(function(array,values){var comparator=last(values);if(isArrayLikeObject(comparator)){comparator=undefined;}return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true),undefined,comparator):[];});/**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */function drop(array,n,guard){var length=array==null?0:array.length;if(!length){return[];}n=guard||n===undefined?1:toInteger(n);return baseSlice(array,n<0?0:n,length);}/**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */function dropRight(array,n,guard){var length=array==null?0:array.length;if(!length){return[];}n=guard||n===undefined?1:toInteger(n);n=length-n;return baseSlice(array,0,n<0?0:n);}/**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */function dropRightWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),true,true):[];}/**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */function dropWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),true):[];}/**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */function fill(array,value,start,end){var length=array==null?0:array.length;if(!length){return[];}if(start&&typeof start!='number'&&isIterateeCall(array,value,start)){start=0;end=length;}return baseFill(array,value,start,end);}/**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */function findIndex(array,predicate,fromIndex){var length=array==null?0:array.length;if(!length){return-1;}var index=fromIndex==null?0:toInteger(fromIndex);if(index<0){index=nativeMax(length+index,0);}return baseFindIndex(array,getIteratee(predicate,3),index);}/**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */function findLastIndex(array,predicate,fromIndex){var length=array==null?0:array.length;if(!length){return-1;}var index=length-1;if(fromIndex!==undefined){index=toInteger(fromIndex);index=fromIndex<0?nativeMax(length+index,0):nativeMin(index,length-1);}return baseFindIndex(array,getIteratee(predicate,3),index,true);}/**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */function flatten(array){var length=array==null?0:array.length;return length?baseFlatten(array,1):[];}/**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */function flattenDeep(array){var length=array==null?0:array.length;return length?baseFlatten(array,INFINITY):[];}/**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */function flattenDepth(array,depth){var length=array==null?0:array.length;if(!length){return[];}depth=depth===undefined?1:toInteger(depth);return baseFlatten(array,depth);}/**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */function fromPairs(pairs){var index=-1,length=pairs==null?0:pairs.length,result={};while(++index<length){var pair=pairs[index];result[pair[0]]=pair[1];}return result;}/**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */function head(array){return array&&array.length?array[0]:undefined;}/**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */function indexOf(array,value,fromIndex){var length=array==null?0:array.length;if(!length){return-1;}var index=fromIndex==null?0:toInteger(fromIndex);if(index<0){index=nativeMax(length+index,0);}return baseIndexOf(array,value,index);}/**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */function initial(array){var length=array==null?0:array.length;return length?baseSlice(array,0,-1):[];}/**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */var intersection=baseRest(function(arrays){var mapped=arrayMap(arrays,castArrayLikeObject);return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped):[];});/**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */var intersectionBy=baseRest(function(arrays){var iteratee=last(arrays),mapped=arrayMap(arrays,castArrayLikeObject);if(iteratee===last(mapped)){iteratee=undefined;}else{mapped.pop();}return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped,getIteratee(iteratee,2)):[];});/**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */var intersectionWith=baseRest(function(arrays){var comparator=last(arrays),mapped=arrayMap(arrays,castArrayLikeObject);comparator=typeof comparator=='function'?comparator:undefined;if(comparator){mapped.pop();}return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped,undefined,comparator):[];});/**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */function join(array,separator){return array==null?'':nativeJoin.call(array,separator);}/**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */function last(array){var length=array==null?0:array.length;return length?array[length-1]:undefined;}/**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */function lastIndexOf(array,value,fromIndex){var length=array==null?0:array.length;if(!length){return-1;}var index=length;if(fromIndex!==undefined){index=toInteger(fromIndex);index=index<0?nativeMax(length+index,0):nativeMin(index,length-1);}return value===value?strictLastIndexOf(array,value,index):baseFindIndex(array,baseIsNaN,index,true);}/**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */function nth(array,n){return array&&array.length?baseNth(array,toInteger(n)):undefined;}/**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */var pull=baseRest(pullAll);/**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */function pullAll(array,values){return array&&array.length&&values&&values.length?basePullAll(array,values):array;}/**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */function pullAllBy(array,values,iteratee){return array&&array.length&&values&&values.length?basePullAll(array,values,getIteratee(iteratee,2)):array;}/**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */function pullAllWith(array,values,comparator){return array&&array.length&&values&&values.length?basePullAll(array,values,undefined,comparator):array;}/**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */var pullAt=flatRest(function(array,indexes){var length=array==null?0:array.length,result=baseAt(array,indexes);basePullAt(array,arrayMap(indexes,function(index){return isIndex(index,length)?+index:index;}).sort(compareAscending));return result;});/**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */function remove(array,predicate){var result=[];if(!(array&&array.length)){return result;}var index=-1,indexes=[],length=array.length;predicate=getIteratee(predicate,3);while(++index<length){var value=array[index];if(predicate(value,index,array)){result.push(value);indexes.push(index);}}basePullAt(array,indexes);return result;}/**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */function reverse(array){return array==null?array:nativeReverse.call(array);}/**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */function slice(array,start,end){var length=array==null?0:array.length;if(!length){return[];}if(end&&typeof end!='number'&&isIterateeCall(array,start,end)){start=0;end=length;}else{start=start==null?0:toInteger(start);end=end===undefined?length:toInteger(end);}return baseSlice(array,start,end);}/**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */function sortedIndex(array,value){return baseSortedIndex(array,value);}/**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */function sortedIndexBy(array,value,iteratee){return baseSortedIndexBy(array,value,getIteratee(iteratee,2));}/**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */function sortedIndexOf(array,value){var length=array==null?0:array.length;if(length){var index=baseSortedIndex(array,value);if(index<length&&eq(array[index],value)){return index;}}return-1;}/**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */function sortedLastIndex(array,value){return baseSortedIndex(array,value,true);}/**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */function sortedLastIndexBy(array,value,iteratee){return baseSortedIndexBy(array,value,getIteratee(iteratee,2),true);}/**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */function sortedLastIndexOf(array,value){var length=array==null?0:array.length;if(length){var index=baseSortedIndex(array,value,true)-1;if(eq(array[index],value)){return index;}}return-1;}/**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */function sortedUniq(array){return array&&array.length?baseSortedUniq(array):[];}/**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */function sortedUniqBy(array,iteratee){return array&&array.length?baseSortedUniq(array,getIteratee(iteratee,2)):[];}/**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */function tail(array){var length=array==null?0:array.length;return length?baseSlice(array,1,length):[];}/**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */function take(array,n,guard){if(!(array&&array.length)){return[];}n=guard||n===undefined?1:toInteger(n);return baseSlice(array,0,n<0?0:n);}/**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */function takeRight(array,n,guard){var length=array==null?0:array.length;if(!length){return[];}n=guard||n===undefined?1:toInteger(n);n=length-n;return baseSlice(array,n<0?0:n,length);}/**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */function takeRightWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),false,true):[];}/**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */function takeWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3)):[];}/**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */var union=baseRest(function(arrays){return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true));});/**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */var unionBy=baseRest(function(arrays){var iteratee=last(arrays);if(isArrayLikeObject(iteratee)){iteratee=undefined;}return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true),getIteratee(iteratee,2));});/**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */var unionWith=baseRest(function(arrays){var comparator=last(arrays);comparator=typeof comparator=='function'?comparator:undefined;return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true),undefined,comparator);});/**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */function uniq(array){return array&&array.length?baseUniq(array):[];}/**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */function uniqBy(array,iteratee){return array&&array.length?baseUniq(array,getIteratee(iteratee,2)):[];}/**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */function uniqWith(array,comparator){comparator=typeof comparator=='function'?comparator:undefined;return array&&array.length?baseUniq(array,undefined,comparator):[];}/**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */function unzip(array){if(!(array&&array.length)){return[];}var length=0;array=arrayFilter(array,function(group){if(isArrayLikeObject(group)){length=nativeMax(group.length,length);return true;}});return baseTimes(length,function(index){return arrayMap(array,baseProperty(index));});}/**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */function unzipWith(array,iteratee){if(!(array&&array.length)){return[];}var result=unzip(array);if(iteratee==null){return result;}return arrayMap(result,function(group){return apply(iteratee,undefined,group);});}/**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */var without=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,values):[];});/**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */var xor=baseRest(function(arrays){return baseXor(arrayFilter(arrays,isArrayLikeObject));});/**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */var xorBy=baseRest(function(arrays){var iteratee=last(arrays);if(isArrayLikeObject(iteratee)){iteratee=undefined;}return baseXor(arrayFilter(arrays,isArrayLikeObject),getIteratee(iteratee,2));});/**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */var xorWith=baseRest(function(arrays){var comparator=last(arrays);comparator=typeof comparator=='function'?comparator:undefined;return baseXor(arrayFilter(arrays,isArrayLikeObject),undefined,comparator);});/**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */var zip=baseRest(unzip);/**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */function zipObject(props,values){return baseZipObject(props||[],values||[],assignValue);}/**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */function zipObjectDeep(props,values){return baseZipObject(props||[],values||[],baseSet);}/**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */var zipWith=baseRest(function(arrays){var length=arrays.length,iteratee=length>1?arrays[length-1]:undefined;iteratee=typeof iteratee=='function'?(arrays.pop(),iteratee):undefined;return unzipWith(arrays,iteratee);});/*------------------------------------------------------------------------*//**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */function chain(value){var result=lodash(value);result.__chain__=true;return result;}/**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */function tap(value,interceptor){interceptor(value);return value;}/**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */function thru(value,interceptor){return interceptor(value);}/**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */var wrapperAt=flatRest(function(paths){var length=paths.length,start=length?paths[0]:0,value=this.__wrapped__,interceptor=function interceptor(object){return baseAt(object,paths);};if(length>1||this.__actions__.length||!(value instanceof LazyWrapper)||!isIndex(start)){return this.thru(interceptor);}value=value.slice(start,+start+(length?1:0));value.__actions__.push({'func':thru,'args':[interceptor],'thisArg':undefined});return new LodashWrapper(value,this.__chain__).thru(function(array){if(length&&!array.length){array.push(undefined);}return array;});});/**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */function wrapperChain(){return chain(this);}/**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */function wrapperCommit(){return new LodashWrapper(this.value(),this.__chain__);}/**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */function wrapperNext(){if(this.__values__===undefined){this.__values__=toArray(this.value());}var done=this.__index__>=this.__values__.length,value=done?undefined:this.__values__[this.__index__++];return{'done':done,'value':value};}/**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */function wrapperToIterator(){return this;}/**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */function wrapperPlant(value){var result,parent=this;while(parent instanceof baseLodash){var clone=wrapperClone(parent);clone.__index__=0;clone.__values__=undefined;if(result){previous.__wrapped__=clone;}else{result=clone;}var previous=clone;parent=parent.__wrapped__;}previous.__wrapped__=value;return result;}/**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */function wrapperReverse(){var value=this.__wrapped__;if(value instanceof LazyWrapper){var wrapped=value;if(this.__actions__.length){wrapped=new LazyWrapper(this);}wrapped=wrapped.reverse();wrapped.__actions__.push({'func':thru,'args':[reverse],'thisArg':undefined});return new LodashWrapper(wrapped,this.__chain__);}return this.thru(reverse);}/**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__);}/*------------------------------------------------------------------------*//**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */var countBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){++result[key];}else{baseAssignValue(result,key,1);}});/**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */function every(collection,predicate,guard){var func=isArray(collection)?arrayEvery:baseEvery;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined;}return func(collection,getIteratee(predicate,3));}/**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     */function filter(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,getIteratee(predicate,3));}/**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */var find=createFind(findIndex);/**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */var findLast=createFind(findLastIndex);/**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */function flatMap(collection,iteratee){return baseFlatten(map(collection,iteratee),1);}/**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */function flatMapDeep(collection,iteratee){return baseFlatten(map(collection,iteratee),INFINITY);}/**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */function flatMapDepth(collection,iteratee,depth){depth=depth===undefined?1:toInteger(depth);return baseFlatten(map(collection,iteratee),depth);}/**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */function forEach(collection,iteratee){var func=isArray(collection)?arrayEach:baseEach;return func(collection,getIteratee(iteratee,3));}/**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */function forEachRight(collection,iteratee){var func=isArray(collection)?arrayEachRight:baseEachRight;return func(collection,getIteratee(iteratee,3));}/**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */var groupBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){result[key].push(value);}else{baseAssignValue(result,key,[value]);}});/**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */function includes(collection,value,fromIndex,guard){collection=isArrayLike(collection)?collection:values(collection);fromIndex=fromIndex&&!guard?toInteger(fromIndex):0;var length=collection.length;if(fromIndex<0){fromIndex=nativeMax(length+fromIndex,0);}return isString(collection)?fromIndex<=length&&collection.indexOf(value,fromIndex)>-1:!!length&&baseIndexOf(collection,value,fromIndex)>-1;}/**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */var invokeMap=baseRest(function(collection,path,args){var index=-1,isFunc=typeof path=='function',result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value){result[++index]=isFunc?apply(path,value,args):baseInvoke(value,path,args);});return result;});/**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */var keyBy=createAggregator(function(result,value,key){baseAssignValue(result,key,value);});/**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,getIteratee(iteratee,3));}/**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */function orderBy(collection,iteratees,orders,guard){if(collection==null){return[];}if(!isArray(iteratees)){iteratees=iteratees==null?[]:[iteratees];}orders=guard?undefined:orders;if(!isArray(orders)){orders=orders==null?[]:[orders];}return baseOrderBy(collection,iteratees,orders);}/**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */var partition=createAggregator(function(result,value,key){result[key?0:1].push(value);},function(){return[[],[]];});/**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */function reduce(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduce:baseReduce,initAccum=arguments.length<3;return func(collection,getIteratee(iteratee,4),accumulator,initAccum,baseEach);}/**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */function reduceRight(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduceRight:baseReduce,initAccum=arguments.length<3;return func(collection,getIteratee(iteratee,4),accumulator,initAccum,baseEachRight);}/**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */function reject(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,negate(getIteratee(predicate,3)));}/**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */function sample(collection){var func=isArray(collection)?arraySample:baseSample;return func(collection);}/**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */function sampleSize(collection,n,guard){if(guard?isIterateeCall(collection,n,guard):n===undefined){n=1;}else{n=toInteger(n);}var func=isArray(collection)?arraySampleSize:baseSampleSize;return func(collection,n);}/**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */function shuffle(collection){var func=isArray(collection)?arrayShuffle:baseShuffle;return func(collection);}/**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */function size(collection){if(collection==null){return 0;}if(isArrayLike(collection)){return isString(collection)?stringSize(collection):collection.length;}var tag=getTag(collection);if(tag==mapTag||tag==setTag){return collection.size;}return baseKeys(collection).length;}/**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */function some(collection,predicate,guard){var func=isArray(collection)?arraySome:baseSome;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined;}return func(collection,getIteratee(predicate,3));}/**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n     */var sortBy=baseRest(function(collection,iteratees){if(collection==null){return[];}var length=iteratees.length;if(length>1&&isIterateeCall(collection,iteratees[0],iteratees[1])){iteratees=[];}else if(length>2&&isIterateeCall(iteratees[0],iteratees[1],iteratees[2])){iteratees=[iteratees[0]];}return baseOrderBy(collection,baseFlatten(iteratees,1),[]);});/*------------------------------------------------------------------------*//**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */var now=ctxNow||function(){return root.Date.now();};/*------------------------------------------------------------------------*//**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */function after(n,func){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}n=toInteger(n);return function(){if(--n<1){return func.apply(this,arguments);}};}/**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */function ary(func,n,guard){n=guard?undefined:n;n=func&&n==null?func.length:n;return createWrap(func,WRAP_ARY_FLAG,undefined,undefined,undefined,undefined,n);}/**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */function before(n,func){var result;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}n=toInteger(n);return function(){if(--n>0){result=func.apply(this,arguments);}if(n<=1){func=undefined;}return result;};}/**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */var bind=baseRest(function(func,thisArg,partials){var bitmask=WRAP_BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bind));bitmask|=WRAP_PARTIAL_FLAG;}return createWrap(func,bitmask,thisArg,partials,holders);});/**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */var bindKey=baseRest(function(object,key,partials){var bitmask=WRAP_BIND_FLAG|WRAP_BIND_KEY_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bindKey));bitmask|=WRAP_PARTIAL_FLAG;}return createWrap(key,bitmask,object,partials,holders);});/**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */function curry(func,arity,guard){arity=guard?undefined:arity;var result=createWrap(func,WRAP_CURRY_FLAG,undefined,undefined,undefined,undefined,undefined,arity);result.placeholder=curry.placeholder;return result;}/**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */function curryRight(func,arity,guard){arity=guard?undefined:arity;var result=createWrap(func,WRAP_CURRY_RIGHT_FLAG,undefined,undefined,undefined,undefined,undefined,arity);result.placeholder=curryRight.placeholder;return result;}/**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */function debounce(func,wait,options){var lastArgs,lastThis,maxWait,result,timerId,lastCallTime,lastInvokeTime=0,leading=false,maxing=false,trailing=true;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}wait=toNumber(wait)||0;if(isObject(options)){leading=!!options.leading;maxing='maxWait'in options;maxWait=maxing?nativeMax(toNumber(options.maxWait)||0,wait):maxWait;trailing='trailing'in options?!!options.trailing:trailing;}function invokeFunc(time){var args=lastArgs,thisArg=lastThis;lastArgs=lastThis=undefined;lastInvokeTime=time;result=func.apply(thisArg,args);return result;}function leadingEdge(time){// Reset any `maxWait` timer.\nlastInvokeTime=time;// Start the timer for the trailing edge.\ntimerId=setTimeout(timerExpired,wait);// Invoke the leading edge.\nreturn leading?invokeFunc(time):result;}function remainingWait(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime,result=wait-timeSinceLastCall;return maxing?nativeMin(result,maxWait-timeSinceLastInvoke):result;}function shouldInvoke(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime;// Either this is the first call, activity has stopped and we're at the\n// trailing edge, the system time has gone backwards and we're treating\n// it as the trailing edge, or we've hit the `maxWait` limit.\nreturn lastCallTime===undefined||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&timeSinceLastInvoke>=maxWait;}function timerExpired(){var time=now();if(shouldInvoke(time)){return trailingEdge(time);}// Restart the timer.\ntimerId=setTimeout(timerExpired,remainingWait(time));}function trailingEdge(time){timerId=undefined;// Only invoke if we have `lastArgs` which means `func` has been\n// debounced at least once.\nif(trailing&&lastArgs){return invokeFunc(time);}lastArgs=lastThis=undefined;return result;}function cancel(){if(timerId!==undefined){clearTimeout(timerId);}lastInvokeTime=0;lastArgs=lastCallTime=lastThis=timerId=undefined;}function flush(){return timerId===undefined?result:trailingEdge(now());}function debounced(){var time=now(),isInvoking=shouldInvoke(time);lastArgs=arguments;lastThis=this;lastCallTime=time;if(isInvoking){if(timerId===undefined){return leadingEdge(lastCallTime);}if(maxing){// Handle invocations in a tight loop.\ntimerId=setTimeout(timerExpired,wait);return invokeFunc(lastCallTime);}}if(timerId===undefined){timerId=setTimeout(timerExpired,wait);}return result;}debounced.cancel=cancel;debounced.flush=flush;return debounced;}/**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */var defer=baseRest(function(func,args){return baseDelay(func,1,args);});/**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */var delay=baseRest(function(func,wait,args){return baseDelay(func,toNumber(wait)||0,args);});/**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */function flip(func){return createWrap(func,WRAP_FLIP_FLAG);}/**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */function memoize(func,resolver){if(typeof func!='function'||resolver!=null&&typeof resolver!='function'){throw new TypeError(FUNC_ERROR_TEXT);}var memoized=function memoized(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key);}var result=func.apply(this,args);memoized.cache=cache.set(key,result)||cache;return result;};memoized.cache=new(memoize.Cache||MapCache)();return memoized;}// Expose `MapCache`.\nmemoize.Cache=MapCache;/**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */function negate(predicate){if(typeof predicate!='function'){throw new TypeError(FUNC_ERROR_TEXT);}return function(){var args=arguments;switch(args.length){case 0:return!predicate.call(this);case 1:return!predicate.call(this,args[0]);case 2:return!predicate.call(this,args[0],args[1]);case 3:return!predicate.call(this,args[0],args[1],args[2]);}return!predicate.apply(this,args);};}/**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */function once(func){return before(2,func);}/**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */var overArgs=castRest(function(func,transforms){transforms=transforms.length==1&&isArray(transforms[0])?arrayMap(transforms[0],baseUnary(getIteratee())):arrayMap(baseFlatten(transforms,1),baseUnary(getIteratee()));var funcsLength=transforms.length;return baseRest(function(args){var index=-1,length=nativeMin(args.length,funcsLength);while(++index<length){args[index]=transforms[index].call(this,args[index]);}return apply(func,this,args);});});/**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */var partial=baseRest(function(func,partials){var holders=replaceHolders(partials,getHolder(partial));return createWrap(func,WRAP_PARTIAL_FLAG,undefined,partials,holders);});/**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */var partialRight=baseRest(function(func,partials){var holders=replaceHolders(partials,getHolder(partialRight));return createWrap(func,WRAP_PARTIAL_RIGHT_FLAG,undefined,partials,holders);});/**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */var rearg=flatRest(function(func,indexes){return createWrap(func,WRAP_REARG_FLAG,undefined,undefined,undefined,indexes);});/**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */function rest(func,start){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}start=start===undefined?start:toInteger(start);return baseRest(func,start);}/**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */function spread(func,start){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}start=start==null?0:nativeMax(toInteger(start),0);return baseRest(function(args){var array=args[start],otherArgs=castSlice(args,0,start);if(array){arrayPush(otherArgs,array);}return apply(func,this,otherArgs);});}/**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */function throttle(func,wait,options){var leading=true,trailing=true;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}if(isObject(options)){leading='leading'in options?!!options.leading:leading;trailing='trailing'in options?!!options.trailing:trailing;}return debounce(func,wait,{'leading':leading,'maxWait':wait,'trailing':trailing});}/**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */function unary(func){return ary(func,1);}/**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */function wrap(value,wrapper){return partial(castFunction(wrapper),value);}/*------------------------------------------------------------------------*//**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */function castArray(){if(!arguments.length){return[];}var value=arguments[0];return isArray(value)?value:[value];}/**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */function clone(value){return baseClone(value,CLONE_SYMBOLS_FLAG);}/**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */function cloneWith(value,customizer){customizer=typeof customizer=='function'?customizer:undefined;return baseClone(value,CLONE_SYMBOLS_FLAG,customizer);}/**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */function cloneDeep(value){return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG);}/**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */function cloneDeepWith(value,customizer){customizer=typeof customizer=='function'?customizer:undefined;return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG,customizer);}/**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */function conformsTo(object,source){return source==null||baseConformsTo(object,source,keys(source));}/**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */function eq(value,other){return value===other||value!==value&&other!==other;}/**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */var gt=createRelationalOperation(baseGt);/**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */var gte=createRelationalOperation(function(value,other){return value>=other;});/**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */var isArguments=baseIsArguments(function(){return arguments;}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,'callee')&&!propertyIsEnumerable.call(value,'callee');};/**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */var isArray=Array.isArray;/**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */var isArrayBuffer=nodeIsArrayBuffer?baseUnary(nodeIsArrayBuffer):baseIsArrayBuffer;/**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}/**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value);}/**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */function isBoolean(value){return value===true||value===false||isObjectLike(value)&&baseGetTag(value)==boolTag;}/**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */var isBuffer=nativeIsBuffer||stubFalse;/**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */var isDate=nodeIsDate?baseUnary(nodeIsDate):baseIsDate;/**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */function isElement(value){return isObjectLike(value)&&value.nodeType===1&&!isPlainObject(value);}/**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */function isEmpty(value){if(value==null){return true;}if(isArrayLike(value)&&(isArray(value)||typeof value=='string'||typeof value.splice=='function'||isBuffer(value)||isTypedArray(value)||isArguments(value))){return!value.length;}var tag=getTag(value);if(tag==mapTag||tag==setTag){return!value.size;}if(isPrototype(value)){return!baseKeys(value).length;}for(var key in value){if(hasOwnProperty.call(value,key)){return false;}}return true;}/**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */function isEqual(value,other){return baseIsEqual(value,other);}/**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */function isEqualWith(value,other,customizer){customizer=typeof customizer=='function'?customizer:undefined;var result=customizer?customizer(value,other):undefined;return result===undefined?baseIsEqual(value,other,undefined,customizer):!!result;}/**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */function isError(value){if(!isObjectLike(value)){return false;}var tag=baseGetTag(value);return tag==errorTag||tag==domExcTag||typeof value.message=='string'&&typeof value.name=='string'&&!isPlainObject(value);}/**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */function isFinite(value){return typeof value=='number'&&nativeIsFinite(value);}/**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */function isFunction(value){if(!isObject(value)){return false;}// The use of `Object#toString` avoids issues with the `typeof` operator\n// in Safari 9 which returns 'object' for typed arrays and other constructors.\nvar tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}/**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */function isInteger(value){return typeof value=='number'&&value==toInteger(value);}/**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}/**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */function isObject(value){var type=typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value);return value!=null&&(type=='object'||type=='function');}/**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */function isObjectLike(value){return value!=null&&(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))=='object';}/**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */var isMap=nodeIsMap?baseUnary(nodeIsMap):baseIsMap;/**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */function isMatch(object,source){return object===source||baseIsMatch(object,source,getMatchData(source));}/**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */function isMatchWith(object,source,customizer){customizer=typeof customizer=='function'?customizer:undefined;return baseIsMatch(object,source,getMatchData(source),customizer);}/**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */function isNaN(value){// An `NaN` primitive is the only value that is not equal to itself.\n// Perform the `toStringTag` check first to avoid errors with some\n// ActiveX objects in IE.\nreturn isNumber(value)&&value!=+value;}/**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */function isNative(value){if(isMaskable(value)){throw new Error(CORE_ERROR_TEXT);}return baseIsNative(value);}/**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */function isNull(value){return value===null;}/**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */function isNil(value){return value==null;}/**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */function isNumber(value){return typeof value=='number'||isObjectLike(value)&&baseGetTag(value)==numberTag;}/**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */function isPlainObject(value){if(!isObjectLike(value)||baseGetTag(value)!=objectTag){return false;}var proto=getPrototype(value);if(proto===null){return true;}var Ctor=hasOwnProperty.call(proto,'constructor')&&proto.constructor;return typeof Ctor=='function'&&Ctor instanceof Ctor&&funcToString.call(Ctor)==objectCtorString;}/**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */var isRegExp=nodeIsRegExp?baseUnary(nodeIsRegExp):baseIsRegExp;/**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */function isSafeInteger(value){return isInteger(value)&&value>=-MAX_SAFE_INTEGER&&value<=MAX_SAFE_INTEGER;}/**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */var isSet=nodeIsSet?baseUnary(nodeIsSet):baseIsSet;/**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */function isString(value){return typeof value=='string'||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag;}/**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */function isSymbol(value){return(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))=='symbol'||isObjectLike(value)&&baseGetTag(value)==symbolTag;}/**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;/**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */function isUndefined(value){return value===undefined;}/**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */function isWeakMap(value){return isObjectLike(value)&&getTag(value)==weakMapTag;}/**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */function isWeakSet(value){return isObjectLike(value)&&baseGetTag(value)==weakSetTag;}/**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */var lt=createRelationalOperation(baseLt);/**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */var lte=createRelationalOperation(function(value,other){return value<=other;});/**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */function toArray(value){if(!value){return[];}if(isArrayLike(value)){return isString(value)?stringToArray(value):copyArray(value);}if(symIterator&&value[symIterator]){return iteratorToArray(value[symIterator]());}var tag=getTag(value),func=tag==mapTag?mapToArray:tag==setTag?setToArray:values;return func(value);}/**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */function toFinite(value){if(!value){return value===0?value:0;}value=toNumber(value);if(value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER;}return value===value?value:0;}/**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0;}/**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */function toLength(value){return value?baseClamp(toInteger(value),0,MAX_ARRAY_LENGTH):0;}/**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */function toNumber(value){if(typeof value=='number'){return value;}if(isSymbol(value)){return NAN;}if(isObject(value)){var other=typeof value.valueOf=='function'?value.valueOf():value;value=isObject(other)?other+'':other;}if(typeof value!='string'){return value===0?value:+value;}value=value.replace(reTrim,'');var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value;}/**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */function toPlainObject(value){return copyObject(value,keysIn(value));}/**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */function toSafeInteger(value){return value?baseClamp(toInteger(value),-MAX_SAFE_INTEGER,MAX_SAFE_INTEGER):value===0?value:0;}/**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */function toString(value){return value==null?'':baseToString(value);}/*------------------------------------------------------------------------*//**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */var assign=createAssigner(function(object,source){if(isPrototype(source)||isArrayLike(source)){copyObject(source,keys(source),object);return;}for(var key in source){if(hasOwnProperty.call(source,key)){assignValue(object,key,source[key]);}}});/**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */var assignIn=createAssigner(function(object,source){copyObject(source,keysIn(source),object);});/**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */var assignInWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keysIn(source),object,customizer);});/**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */var assignWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keys(source),object,customizer);});/**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */var at=flatRest(baseAt);/**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */function create(prototype,properties){var result=baseCreate(prototype);return properties==null?result:baseAssign(result,properties);}/**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */var defaults=baseRest(function(args){args.push(undefined,customDefaultsAssignIn);return apply(assignInWith,undefined,args);});/**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */var defaultsDeep=baseRest(function(args){args.push(undefined,customDefaultsMerge);return apply(mergeWith,undefined,args);});/**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */function findKey(object,predicate){return baseFindKey(object,getIteratee(predicate,3),baseForOwn);}/**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */function findLastKey(object,predicate){return baseFindKey(object,getIteratee(predicate,3),baseForOwnRight);}/**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */function forIn(object,iteratee){return object==null?object:baseFor(object,getIteratee(iteratee,3),keysIn);}/**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */function forInRight(object,iteratee){return object==null?object:baseForRight(object,getIteratee(iteratee,3),keysIn);}/**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */function forOwn(object,iteratee){return object&&baseForOwn(object,getIteratee(iteratee,3));}/**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */function forOwnRight(object,iteratee){return object&&baseForOwnRight(object,getIteratee(iteratee,3));}/**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */function functions(object){return object==null?[]:baseFunctions(object,keys(object));}/**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */function functionsIn(object){return object==null?[]:baseFunctions(object,keysIn(object));}/**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */function get(object,path,defaultValue){var result=object==null?undefined:baseGet(object,path);return result===undefined?defaultValue:result;}/**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */function has(object,path){return object!=null&&hasPath(object,path,baseHas);}/**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */function hasIn(object,path){return object!=null&&hasPath(object,path,baseHasIn);}/**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */var invert=createInverter(function(result,value,key){result[value]=key;},constant(identity));/**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */var invertBy=createInverter(function(result,value,key){if(hasOwnProperty.call(result,value)){result[value].push(key);}else{result[value]=[key];}},getIteratee);/**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */var invoke=baseRest(baseInvoke);/**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}/**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */function keysIn(object){return isArrayLike(object)?arrayLikeKeys(object,true):baseKeysIn(object);}/**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */function mapKeys(object,iteratee){var result={};iteratee=getIteratee(iteratee,3);baseForOwn(object,function(value,key,object){baseAssignValue(result,iteratee(value,key,object),value);});return result;}/**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */function mapValues(object,iteratee){var result={};iteratee=getIteratee(iteratee,3);baseForOwn(object,function(value,key,object){baseAssignValue(result,key,iteratee(value,key,object));});return result;}/**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */var merge=createAssigner(function(object,source,srcIndex){baseMerge(object,source,srcIndex);});/**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */var mergeWith=createAssigner(function(object,source,srcIndex,customizer){baseMerge(object,source,srcIndex,customizer);});/**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */var omit=flatRest(function(object,paths){var result={};if(object==null){return result;}var isDeep=false;paths=arrayMap(paths,function(path){path=castPath(path,object);isDeep||(isDeep=path.length>1);return path;});copyObject(object,getAllKeysIn(object),result);if(isDeep){result=baseClone(result,CLONE_DEEP_FLAG|CLONE_FLAT_FLAG|CLONE_SYMBOLS_FLAG,customOmitClone);}var length=paths.length;while(length--){baseUnset(result,paths[length]);}return result;});/**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */function omitBy(object,predicate){return pickBy(object,negate(getIteratee(predicate)));}/**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */var pick=flatRest(function(object,paths){return object==null?{}:basePick(object,paths);});/**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */function pickBy(object,predicate){if(object==null){return{};}var props=arrayMap(getAllKeysIn(object),function(prop){return[prop];});predicate=getIteratee(predicate);return basePickBy(object,props,function(value,path){return predicate(value,path[0]);});}/**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */function result(object,path,defaultValue){path=castPath(path,object);var index=-1,length=path.length;// Ensure the loop is entered when path is empty.\nif(!length){length=1;object=undefined;}while(++index<length){var value=object==null?undefined:object[toKey(path[index])];if(value===undefined){index=length;value=defaultValue;}object=isFunction(value)?value.call(object):value;}return object;}/**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */function set(object,path,value){return object==null?object:baseSet(object,path,value);}/**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */function setWith(object,path,value,customizer){customizer=typeof customizer=='function'?customizer:undefined;return object==null?object:baseSet(object,path,value,customizer);}/**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */var toPairs=createToPairs(keys);/**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */var toPairsIn=createToPairs(keysIn);/**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */function transform(object,iteratee,accumulator){var isArr=isArray(object),isArrLike=isArr||isBuffer(object)||isTypedArray(object);iteratee=getIteratee(iteratee,4);if(accumulator==null){var Ctor=object&&object.constructor;if(isArrLike){accumulator=isArr?new Ctor():[];}else if(isObject(object)){accumulator=isFunction(Ctor)?baseCreate(getPrototype(object)):{};}else{accumulator={};}}(isArrLike?arrayEach:baseForOwn)(object,function(value,index,object){return iteratee(accumulator,value,index,object);});return accumulator;}/**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */function unset(object,path){return object==null?true:baseUnset(object,path);}/**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */function update(object,path,updater){return object==null?object:baseUpdate(object,path,castFunction(updater));}/**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */function updateWith(object,path,updater,customizer){customizer=typeof customizer=='function'?customizer:undefined;return object==null?object:baseUpdate(object,path,castFunction(updater),customizer);}/**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */function values(object){return object==null?[]:baseValues(object,keys(object));}/**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */function valuesIn(object){return object==null?[]:baseValues(object,keysIn(object));}/*------------------------------------------------------------------------*//**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */function clamp(number,lower,upper){if(upper===undefined){upper=lower;lower=undefined;}if(upper!==undefined){upper=toNumber(upper);upper=upper===upper?upper:0;}if(lower!==undefined){lower=toNumber(lower);lower=lower===lower?lower:0;}return baseClamp(toNumber(number),lower,upper);}/**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */function inRange(number,start,end){start=toFinite(start);if(end===undefined){end=start;start=0;}else{end=toFinite(end);}number=toNumber(number);return baseInRange(number,start,end);}/**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */function random(lower,upper,floating){if(floating&&typeof floating!='boolean'&&isIterateeCall(lower,upper,floating)){upper=floating=undefined;}if(floating===undefined){if(typeof upper=='boolean'){floating=upper;upper=undefined;}else if(typeof lower=='boolean'){floating=lower;lower=undefined;}}if(lower===undefined&&upper===undefined){lower=0;upper=1;}else{lower=toFinite(lower);if(upper===undefined){upper=lower;lower=0;}else{upper=toFinite(upper);}}if(lower>upper){var temp=lower;lower=upper;upper=temp;}if(floating||lower%1||upper%1){var rand=nativeRandom();return nativeMin(lower+rand*(upper-lower+freeParseFloat('1e-'+((rand+'').length-1))),upper);}return baseRandom(lower,upper);}/*------------------------------------------------------------------------*//**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */var camelCase=createCompounder(function(result,word,index){word=word.toLowerCase();return result+(index?capitalize(word):word);});/**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */function capitalize(string){return upperFirst(toString(string).toLowerCase());}/**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */function deburr(string){string=toString(string);return string&&string.replace(reLatin,deburrLetter).replace(reComboMark,'');}/**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */function endsWith(string,target,position){string=toString(string);target=baseToString(target);var length=string.length;position=position===undefined?length:baseClamp(toInteger(position),0,length);var end=position;position-=target.length;return position>=0&&string.slice(position,end)==target;}/**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */function escape(string){string=toString(string);return string&&reHasUnescapedHtml.test(string)?string.replace(reUnescapedHtml,escapeHtmlChar):string;}/**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */function escapeRegExp(string){string=toString(string);return string&&reHasRegExpChar.test(string)?string.replace(reRegExpChar,'\\\\$&'):string;}/**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */var kebabCase=createCompounder(function(result,word,index){return result+(index?'-':'')+word.toLowerCase();});/**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */var lowerCase=createCompounder(function(result,word,index){return result+(index?' ':'')+word.toLowerCase();});/**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */var lowerFirst=createCaseFirst('toLowerCase');/**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */function pad(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;if(!length||strLength>=length){return string;}var mid=(length-strLength)/2;return createPadding(nativeFloor(mid),chars)+string+createPadding(nativeCeil(mid),chars);}/**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */function padEnd(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;return length&&strLength<length?string+createPadding(length-strLength,chars):string;}/**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */function padStart(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;return length&&strLength<length?createPadding(length-strLength,chars)+string:string;}/**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */function parseInt(string,radix,guard){if(guard||radix==null){radix=0;}else if(radix){radix=+radix;}return nativeParseInt(toString(string).replace(reTrimStart,''),radix||0);}/**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */function repeat(string,n,guard){if(guard?isIterateeCall(string,n,guard):n===undefined){n=1;}else{n=toInteger(n);}return baseRepeat(toString(string),n);}/**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */function replace(){var args=arguments,string=toString(args[0]);return args.length<3?string:string.replace(args[1],args[2]);}/**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */var snakeCase=createCompounder(function(result,word,index){return result+(index?'_':'')+word.toLowerCase();});/**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */function split(string,separator,limit){if(limit&&typeof limit!='number'&&isIterateeCall(string,separator,limit)){separator=limit=undefined;}limit=limit===undefined?MAX_ARRAY_LENGTH:limit>>>0;if(!limit){return[];}string=toString(string);if(string&&(typeof separator=='string'||separator!=null&&!isRegExp(separator))){separator=baseToString(separator);if(!separator&&hasUnicode(string)){return castSlice(stringToArray(string),0,limit);}}return string.split(separator,limit);}/**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */var startCase=createCompounder(function(result,word,index){return result+(index?' ':'')+upperFirst(word);});/**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */function startsWith(string,target,position){string=toString(string);position=position==null?0:baseClamp(toInteger(position),0,string.length);target=baseToString(target);return string.slice(position,position+target.length)==target;}/**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */function template(string,options,guard){// Based on John Resig's `tmpl` implementation\n// (http://ejohn.org/blog/javascript-micro-templating/)\n// and Laura Doktorova's doT.js (https://github.com/olado/doT).\nvar settings=lodash.templateSettings;if(guard&&isIterateeCall(string,options,guard)){options=undefined;}string=toString(string);options=assignInWith({},options,settings,customDefaultsAssignIn);var imports=assignInWith({},options.imports,settings.imports,customDefaultsAssignIn),importsKeys=keys(imports),importsValues=baseValues(imports,importsKeys);var isEscaping,isEvaluating,index=0,interpolate=options.interpolate||reNoMatch,source=\"__p += '\";// Compile the regexp to match each delimiter.\nvar reDelimiters=RegExp((options.escape||reNoMatch).source+'|'+interpolate.source+'|'+(interpolate===reInterpolate?reEsTemplate:reNoMatch).source+'|'+(options.evaluate||reNoMatch).source+'|$','g');// Use a sourceURL for easier debugging.\nvar sourceURL='//# sourceURL='+('sourceURL'in options?options.sourceURL:'lodash.templateSources['+ ++templateCounter+']')+'\\n';string.replace(reDelimiters,function(match,escapeValue,interpolateValue,esTemplateValue,evaluateValue,offset){interpolateValue||(interpolateValue=esTemplateValue);// Escape characters that can't be included in string literals.\nsource+=string.slice(index,offset).replace(reUnescapedString,escapeStringChar);// Replace delimiters with snippets.\nif(escapeValue){isEscaping=true;source+=\"' +\\n__e(\"+escapeValue+\") +\\n'\";}if(evaluateValue){isEvaluating=true;source+=\"';\\n\"+evaluateValue+\";\\n__p += '\";}if(interpolateValue){source+=\"' +\\n((__t = (\"+interpolateValue+\")) == null ? '' : __t) +\\n'\";}index=offset+match.length;// The JS engine embedded in Adobe products needs `match` returned in\n// order to produce the correct `offset` value.\nreturn match;});source+=\"';\\n\";// If `variable` is not specified wrap a with-statement around the generated\n// code to add the data object to the top of the scope chain.\nvar variable=options.variable;if(!variable){source='with (obj) {\\n'+source+'\\n}\\n';}// Cleanup code by stripping empty strings.\nsource=(isEvaluating?source.replace(reEmptyStringLeading,''):source).replace(reEmptyStringMiddle,'$1').replace(reEmptyStringTrailing,'$1;');// Frame code as the function body.\nsource='function('+(variable||'obj')+') {\\n'+(variable?'':'obj || (obj = {});\\n')+\"var __t, __p = ''\"+(isEscaping?', __e = _.escape':'')+(isEvaluating?', __j = Array.prototype.join;\\n'+\"function print() { __p += __j.call(arguments, '') }\\n\":';\\n')+source+'return __p\\n}';var result=attempt(function(){return Function(importsKeys,sourceURL+'return '+source).apply(undefined,importsValues);});// Provide the compiled function's source by its `toString` method or\n// the `source` property as a convenience for inlining compiled templates.\nresult.source=source;if(isError(result)){throw result;}return result;}/**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */function toLower(value){return toString(value).toLowerCase();}/**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */function toUpper(value){return toString(value).toUpperCase();}/**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */function trim(string,chars,guard){string=toString(string);if(string&&(guard||chars===undefined)){return string.replace(reTrim,'');}if(!string||!(chars=baseToString(chars))){return string;}var strSymbols=stringToArray(string),chrSymbols=stringToArray(chars),start=charsStartIndex(strSymbols,chrSymbols),end=charsEndIndex(strSymbols,chrSymbols)+1;return castSlice(strSymbols,start,end).join('');}/**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */function trimEnd(string,chars,guard){string=toString(string);if(string&&(guard||chars===undefined)){return string.replace(reTrimEnd,'');}if(!string||!(chars=baseToString(chars))){return string;}var strSymbols=stringToArray(string),end=charsEndIndex(strSymbols,stringToArray(chars))+1;return castSlice(strSymbols,0,end).join('');}/**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */function trimStart(string,chars,guard){string=toString(string);if(string&&(guard||chars===undefined)){return string.replace(reTrimStart,'');}if(!string||!(chars=baseToString(chars))){return string;}var strSymbols=stringToArray(string),start=charsStartIndex(strSymbols,stringToArray(chars));return castSlice(strSymbols,start).join('');}/**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */function truncate(string,options){var length=DEFAULT_TRUNC_LENGTH,omission=DEFAULT_TRUNC_OMISSION;if(isObject(options)){var separator='separator'in options?options.separator:separator;length='length'in options?toInteger(options.length):length;omission='omission'in options?baseToString(options.omission):omission;}string=toString(string);var strLength=string.length;if(hasUnicode(string)){var strSymbols=stringToArray(string);strLength=strSymbols.length;}if(length>=strLength){return string;}var end=length-stringSize(omission);if(end<1){return omission;}var result=strSymbols?castSlice(strSymbols,0,end).join(''):string.slice(0,end);if(separator===undefined){return result+omission;}if(strSymbols){end+=result.length-end;}if(isRegExp(separator)){if(string.slice(end).search(separator)){var match,substring=result;if(!separator.global){separator=RegExp(separator.source,toString(reFlags.exec(separator))+'g');}separator.lastIndex=0;while(match=separator.exec(substring)){var newEnd=match.index;}result=result.slice(0,newEnd===undefined?end:newEnd);}}else if(string.indexOf(baseToString(separator),end)!=end){var index=result.lastIndexOf(separator);if(index>-1){result=result.slice(0,index);}}return result+omission;}/**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */function unescape(string){string=toString(string);return string&&reHasEscapedHtml.test(string)?string.replace(reEscapedHtml,unescapeHtmlChar):string;}/**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */var upperCase=createCompounder(function(result,word,index){return result+(index?' ':'')+word.toUpperCase();});/**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */var upperFirst=createCaseFirst('toUpperCase');/**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */function words(string,pattern,guard){string=toString(string);pattern=guard?undefined:pattern;if(pattern===undefined){return hasUnicodeWord(string)?unicodeWords(string):asciiWords(string);}return string.match(pattern)||[];}/*------------------------------------------------------------------------*//**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */var attempt=baseRest(function(func,args){try{return apply(func,undefined,args);}catch(e){return isError(e)?e:new Error(e);}});/**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */var bindAll=flatRest(function(object,methodNames){arrayEach(methodNames,function(key){key=toKey(key);baseAssignValue(object,key,bind(object[key],object));});return object;});/**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */function cond(pairs){var length=pairs==null?0:pairs.length,toIteratee=getIteratee();pairs=!length?[]:arrayMap(pairs,function(pair){if(typeof pair[1]!='function'){throw new TypeError(FUNC_ERROR_TEXT);}return[toIteratee(pair[0]),pair[1]];});return baseRest(function(args){var index=-1;while(++index<length){var pair=pairs[index];if(apply(pair[0],this,args)){return apply(pair[1],this,args);}}});}/**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */function conforms(source){return baseConforms(baseClone(source,CLONE_DEEP_FLAG));}/**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */function constant(value){return function(){return value;};}/**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */function defaultTo(value,defaultValue){return value==null||value!==value?defaultValue:value;}/**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */var flow=createFlow();/**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */var flowRight=createFlow(true);/**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */function identity(value){return value;}/**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */function iteratee(func){return baseIteratee(typeof func=='function'?func:baseClone(func,CLONE_DEEP_FLAG));}/**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     */function matches(source){return baseMatches(baseClone(source,CLONE_DEEP_FLAG));}/**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     */function matchesProperty(path,srcValue){return baseMatchesProperty(path,baseClone(srcValue,CLONE_DEEP_FLAG));}/**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */var method=baseRest(function(path,args){return function(object){return baseInvoke(object,path,args);};});/**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */var methodOf=baseRest(function(object,args){return function(path){return baseInvoke(object,path,args);};});/**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */function mixin(object,source,options){var props=keys(source),methodNames=baseFunctions(source,props);if(options==null&&!(isObject(source)&&(methodNames.length||!props.length))){options=source;source=object;object=this;methodNames=baseFunctions(source,keys(source));}var chain=!(isObject(options)&&'chain'in options)||!!options.chain,isFunc=isFunction(object);arrayEach(methodNames,function(methodName){var func=source[methodName];object[methodName]=func;if(isFunc){object.prototype[methodName]=function(){var chainAll=this.__chain__;if(chain||chainAll){var result=object(this.__wrapped__),actions=result.__actions__=copyArray(this.__actions__);actions.push({'func':func,'args':arguments,'thisArg':object});result.__chain__=chainAll;return result;}return func.apply(object,arrayPush([this.value()],arguments));};}});return object;}/**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */function noConflict(){if(root._===this){root._=oldDash;}return this;}/**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */function noop(){}// No operation performed.\n/**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */function nthArg(n){n=toInteger(n);return baseRest(function(args){return baseNth(args,n);});}/**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */var over=createOver(arrayMap);/**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */var overEvery=createOver(arrayEvery);/**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     */var overSome=createOver(arraySome);/**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path);}/**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */function propertyOf(object){return function(path){return object==null?undefined:baseGet(object,path);};}/**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */var range=createRange();/**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */var rangeRight=createRange(true);/**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */function stubArray(){return[];}/**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */function stubFalse(){return false;}/**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */function stubObject(){return{};}/**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */function stubString(){return'';}/**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */function stubTrue(){return true;}/**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */function times(n,iteratee){n=toInteger(n);if(n<1||n>MAX_SAFE_INTEGER){return[];}var index=MAX_ARRAY_LENGTH,length=nativeMin(n,MAX_ARRAY_LENGTH);iteratee=getIteratee(iteratee);n-=MAX_ARRAY_LENGTH;var result=baseTimes(length,iteratee);while(++index<n){iteratee(index);}return result;}/**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */function toPath(value){if(isArray(value)){return arrayMap(value,toKey);}return isSymbol(value)?[value]:copyArray(stringToPath(toString(value)));}/**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */function uniqueId(prefix){var id=++idCounter;return toString(prefix)+id;}/*------------------------------------------------------------------------*//**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */var add=createMathOperation(function(augend,addend){return augend+addend;},0);/**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */var ceil=createRound('ceil');/**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */var divide=createMathOperation(function(dividend,divisor){return dividend/divisor;},1);/**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */var floor=createRound('floor');/**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */function max(array){return array&&array.length?baseExtremum(array,identity,baseGt):undefined;}/**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */function maxBy(array,iteratee){return array&&array.length?baseExtremum(array,getIteratee(iteratee,2),baseGt):undefined;}/**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */function mean(array){return baseMean(array,identity);}/**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */function meanBy(array,iteratee){return baseMean(array,getIteratee(iteratee,2));}/**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */function min(array){return array&&array.length?baseExtremum(array,identity,baseLt):undefined;}/**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */function minBy(array,iteratee){return array&&array.length?baseExtremum(array,getIteratee(iteratee,2),baseLt):undefined;}/**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */var multiply=createMathOperation(function(multiplier,multiplicand){return multiplier*multiplicand;},1);/**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */var round=createRound('round');/**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */var subtract=createMathOperation(function(minuend,subtrahend){return minuend-subtrahend;},0);/**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */function sum(array){return array&&array.length?baseSum(array,identity):0;}/**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */function sumBy(array,iteratee){return array&&array.length?baseSum(array,getIteratee(iteratee,2)):0;}/*------------------------------------------------------------------------*/// Add methods that return wrapped values in chain sequences.\nlodash.after=after;lodash.ary=ary;lodash.assign=assign;lodash.assignIn=assignIn;lodash.assignInWith=assignInWith;lodash.assignWith=assignWith;lodash.at=at;lodash.before=before;lodash.bind=bind;lodash.bindAll=bindAll;lodash.bindKey=bindKey;lodash.castArray=castArray;lodash.chain=chain;lodash.chunk=chunk;lodash.compact=compact;lodash.concat=concat;lodash.cond=cond;lodash.conforms=conforms;lodash.constant=constant;lodash.countBy=countBy;lodash.create=create;lodash.curry=curry;lodash.curryRight=curryRight;lodash.debounce=debounce;lodash.defaults=defaults;lodash.defaultsDeep=defaultsDeep;lodash.defer=defer;lodash.delay=delay;lodash.difference=difference;lodash.differenceBy=differenceBy;lodash.differenceWith=differenceWith;lodash.drop=drop;lodash.dropRight=dropRight;lodash.dropRightWhile=dropRightWhile;lodash.dropWhile=dropWhile;lodash.fill=fill;lodash.filter=filter;lodash.flatMap=flatMap;lodash.flatMapDeep=flatMapDeep;lodash.flatMapDepth=flatMapDepth;lodash.flatten=flatten;lodash.flattenDeep=flattenDeep;lodash.flattenDepth=flattenDepth;lodash.flip=flip;lodash.flow=flow;lodash.flowRight=flowRight;lodash.fromPairs=fromPairs;lodash.functions=functions;lodash.functionsIn=functionsIn;lodash.groupBy=groupBy;lodash.initial=initial;lodash.intersection=intersection;lodash.intersectionBy=intersectionBy;lodash.intersectionWith=intersectionWith;lodash.invert=invert;lodash.invertBy=invertBy;lodash.invokeMap=invokeMap;lodash.iteratee=iteratee;lodash.keyBy=keyBy;lodash.keys=keys;lodash.keysIn=keysIn;lodash.map=map;lodash.mapKeys=mapKeys;lodash.mapValues=mapValues;lodash.matches=matches;lodash.matchesProperty=matchesProperty;lodash.memoize=memoize;lodash.merge=merge;lodash.mergeWith=mergeWith;lodash.method=method;lodash.methodOf=methodOf;lodash.mixin=mixin;lodash.negate=negate;lodash.nthArg=nthArg;lodash.omit=omit;lodash.omitBy=omitBy;lodash.once=once;lodash.orderBy=orderBy;lodash.over=over;lodash.overArgs=overArgs;lodash.overEvery=overEvery;lodash.overSome=overSome;lodash.partial=partial;lodash.partialRight=partialRight;lodash.partition=partition;lodash.pick=pick;lodash.pickBy=pickBy;lodash.property=property;lodash.propertyOf=propertyOf;lodash.pull=pull;lodash.pullAll=pullAll;lodash.pullAllBy=pullAllBy;lodash.pullAllWith=pullAllWith;lodash.pullAt=pullAt;lodash.range=range;lodash.rangeRight=rangeRight;lodash.rearg=rearg;lodash.reject=reject;lodash.remove=remove;lodash.rest=rest;lodash.reverse=reverse;lodash.sampleSize=sampleSize;lodash.set=set;lodash.setWith=setWith;lodash.shuffle=shuffle;lodash.slice=slice;lodash.sortBy=sortBy;lodash.sortedUniq=sortedUniq;lodash.sortedUniqBy=sortedUniqBy;lodash.split=split;lodash.spread=spread;lodash.tail=tail;lodash.take=take;lodash.takeRight=takeRight;lodash.takeRightWhile=takeRightWhile;lodash.takeWhile=takeWhile;lodash.tap=tap;lodash.throttle=throttle;lodash.thru=thru;lodash.toArray=toArray;lodash.toPairs=toPairs;lodash.toPairsIn=toPairsIn;lodash.toPath=toPath;lodash.toPlainObject=toPlainObject;lodash.transform=transform;lodash.unary=unary;lodash.union=union;lodash.unionBy=unionBy;lodash.unionWith=unionWith;lodash.uniq=uniq;lodash.uniqBy=uniqBy;lodash.uniqWith=uniqWith;lodash.unset=unset;lodash.unzip=unzip;lodash.unzipWith=unzipWith;lodash.update=update;lodash.updateWith=updateWith;lodash.values=values;lodash.valuesIn=valuesIn;lodash.without=without;lodash.words=words;lodash.wrap=wrap;lodash.xor=xor;lodash.xorBy=xorBy;lodash.xorWith=xorWith;lodash.zip=zip;lodash.zipObject=zipObject;lodash.zipObjectDeep=zipObjectDeep;lodash.zipWith=zipWith;// Add aliases.\nlodash.entries=toPairs;lodash.entriesIn=toPairsIn;lodash.extend=assignIn;lodash.extendWith=assignInWith;// Add methods to `lodash.prototype`.\nmixin(lodash,lodash);/*------------------------------------------------------------------------*/// Add methods that return unwrapped values in chain sequences.\nlodash.add=add;lodash.attempt=attempt;lodash.camelCase=camelCase;lodash.capitalize=capitalize;lodash.ceil=ceil;lodash.clamp=clamp;lodash.clone=clone;lodash.cloneDeep=cloneDeep;lodash.cloneDeepWith=cloneDeepWith;lodash.cloneWith=cloneWith;lodash.conformsTo=conformsTo;lodash.deburr=deburr;lodash.defaultTo=defaultTo;lodash.divide=divide;lodash.endsWith=endsWith;lodash.eq=eq;lodash.escape=escape;lodash.escapeRegExp=escapeRegExp;lodash.every=every;lodash.find=find;lodash.findIndex=findIndex;lodash.findKey=findKey;lodash.findLast=findLast;lodash.findLastIndex=findLastIndex;lodash.findLastKey=findLastKey;lodash.floor=floor;lodash.forEach=forEach;lodash.forEachRight=forEachRight;lodash.forIn=forIn;lodash.forInRight=forInRight;lodash.forOwn=forOwn;lodash.forOwnRight=forOwnRight;lodash.get=get;lodash.gt=gt;lodash.gte=gte;lodash.has=has;lodash.hasIn=hasIn;lodash.head=head;lodash.identity=identity;lodash.includes=includes;lodash.indexOf=indexOf;lodash.inRange=inRange;lodash.invoke=invoke;lodash.isArguments=isArguments;lodash.isArray=isArray;lodash.isArrayBuffer=isArrayBuffer;lodash.isArrayLike=isArrayLike;lodash.isArrayLikeObject=isArrayLikeObject;lodash.isBoolean=isBoolean;lodash.isBuffer=isBuffer;lodash.isDate=isDate;lodash.isElement=isElement;lodash.isEmpty=isEmpty;lodash.isEqual=isEqual;lodash.isEqualWith=isEqualWith;lodash.isError=isError;lodash.isFinite=isFinite;lodash.isFunction=isFunction;lodash.isInteger=isInteger;lodash.isLength=isLength;lodash.isMap=isMap;lodash.isMatch=isMatch;lodash.isMatchWith=isMatchWith;lodash.isNaN=isNaN;lodash.isNative=isNative;lodash.isNil=isNil;lodash.isNull=isNull;lodash.isNumber=isNumber;lodash.isObject=isObject;lodash.isObjectLike=isObjectLike;lodash.isPlainObject=isPlainObject;lodash.isRegExp=isRegExp;lodash.isSafeInteger=isSafeInteger;lodash.isSet=isSet;lodash.isString=isString;lodash.isSymbol=isSymbol;lodash.isTypedArray=isTypedArray;lodash.isUndefined=isUndefined;lodash.isWeakMap=isWeakMap;lodash.isWeakSet=isWeakSet;lodash.join=join;lodash.kebabCase=kebabCase;lodash.last=last;lodash.lastIndexOf=lastIndexOf;lodash.lowerCase=lowerCase;lodash.lowerFirst=lowerFirst;lodash.lt=lt;lodash.lte=lte;lodash.max=max;lodash.maxBy=maxBy;lodash.mean=mean;lodash.meanBy=meanBy;lodash.min=min;lodash.minBy=minBy;lodash.stubArray=stubArray;lodash.stubFalse=stubFalse;lodash.stubObject=stubObject;lodash.stubString=stubString;lodash.stubTrue=stubTrue;lodash.multiply=multiply;lodash.nth=nth;lodash.noConflict=noConflict;lodash.noop=noop;lodash.now=now;lodash.pad=pad;lodash.padEnd=padEnd;lodash.padStart=padStart;lodash.parseInt=parseInt;lodash.random=random;lodash.reduce=reduce;lodash.reduceRight=reduceRight;lodash.repeat=repeat;lodash.replace=replace;lodash.result=result;lodash.round=round;lodash.runInContext=runInContext;lodash.sample=sample;lodash.size=size;lodash.snakeCase=snakeCase;lodash.some=some;lodash.sortedIndex=sortedIndex;lodash.sortedIndexBy=sortedIndexBy;lodash.sortedIndexOf=sortedIndexOf;lodash.sortedLastIndex=sortedLastIndex;lodash.sortedLastIndexBy=sortedLastIndexBy;lodash.sortedLastIndexOf=sortedLastIndexOf;lodash.startCase=startCase;lodash.startsWith=startsWith;lodash.subtract=subtract;lodash.sum=sum;lodash.sumBy=sumBy;lodash.template=template;lodash.times=times;lodash.toFinite=toFinite;lodash.toInteger=toInteger;lodash.toLength=toLength;lodash.toLower=toLower;lodash.toNumber=toNumber;lodash.toSafeInteger=toSafeInteger;lodash.toString=toString;lodash.toUpper=toUpper;lodash.trim=trim;lodash.trimEnd=trimEnd;lodash.trimStart=trimStart;lodash.truncate=truncate;lodash.unescape=unescape;lodash.uniqueId=uniqueId;lodash.upperCase=upperCase;lodash.upperFirst=upperFirst;// Add aliases.\nlodash.each=forEach;lodash.eachRight=forEachRight;lodash.first=head;mixin(lodash,function(){var source={};baseForOwn(lodash,function(func,methodName){if(!hasOwnProperty.call(lodash.prototype,methodName)){source[methodName]=func;}});return source;}(),{'chain':false});/*------------------------------------------------------------------------*//**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */lodash.VERSION=VERSION;// Assign default placeholders.\narrayEach(['bind','bindKey','curry','curryRight','partial','partialRight'],function(methodName){lodash[methodName].placeholder=lodash;});// Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\narrayEach(['drop','take'],function(methodName,index){LazyWrapper.prototype[methodName]=function(n){n=n===undefined?1:nativeMax(toInteger(n),0);var result=this.__filtered__&&!index?new LazyWrapper(this):this.clone();if(result.__filtered__){result.__takeCount__=nativeMin(n,result.__takeCount__);}else{result.__views__.push({'size':nativeMin(n,MAX_ARRAY_LENGTH),'type':methodName+(result.__dir__<0?'Right':'')});}return result;};LazyWrapper.prototype[methodName+'Right']=function(n){return this.reverse()[methodName](n).reverse();};});// Add `LazyWrapper` methods that accept an `iteratee` value.\narrayEach(['filter','map','takeWhile'],function(methodName,index){var type=index+1,isFilter=type==LAZY_FILTER_FLAG||type==LAZY_WHILE_FLAG;LazyWrapper.prototype[methodName]=function(iteratee){var result=this.clone();result.__iteratees__.push({'iteratee':getIteratee(iteratee,3),'type':type});result.__filtered__=result.__filtered__||isFilter;return result;};});// Add `LazyWrapper` methods for `_.head` and `_.last`.\narrayEach(['head','last'],function(methodName,index){var takeName='take'+(index?'Right':'');LazyWrapper.prototype[methodName]=function(){return this[takeName](1).value()[0];};});// Add `LazyWrapper` methods for `_.initial` and `_.tail`.\narrayEach(['initial','tail'],function(methodName,index){var dropName='drop'+(index?'':'Right');LazyWrapper.prototype[methodName]=function(){return this.__filtered__?new LazyWrapper(this):this[dropName](1);};});LazyWrapper.prototype.compact=function(){return this.filter(identity);};LazyWrapper.prototype.find=function(predicate){return this.filter(predicate).head();};LazyWrapper.prototype.findLast=function(predicate){return this.reverse().find(predicate);};LazyWrapper.prototype.invokeMap=baseRest(function(path,args){if(typeof path=='function'){return new LazyWrapper(this);}return this.map(function(value){return baseInvoke(value,path,args);});});LazyWrapper.prototype.reject=function(predicate){return this.filter(negate(getIteratee(predicate)));};LazyWrapper.prototype.slice=function(start,end){start=toInteger(start);var result=this;if(result.__filtered__&&(start>0||end<0)){return new LazyWrapper(result);}if(start<0){result=result.takeRight(-start);}else if(start){result=result.drop(start);}if(end!==undefined){end=toInteger(end);result=end<0?result.dropRight(-end):result.take(end-start);}return result;};LazyWrapper.prototype.takeRightWhile=function(predicate){return this.reverse().takeWhile(predicate).reverse();};LazyWrapper.prototype.toArray=function(){return this.take(MAX_ARRAY_LENGTH);};// Add `LazyWrapper` methods to `lodash.prototype`.\nbaseForOwn(LazyWrapper.prototype,function(func,methodName){var checkIteratee=/^(?:filter|find|map|reject)|While$/.test(methodName),isTaker=/^(?:head|last)$/.test(methodName),lodashFunc=lodash[isTaker?'take'+(methodName=='last'?'Right':''):methodName],retUnwrapped=isTaker||/^find/.test(methodName);if(!lodashFunc){return;}lodash.prototype[methodName]=function(){var value=this.__wrapped__,args=isTaker?[1]:arguments,isLazy=value instanceof LazyWrapper,iteratee=args[0],useLazy=isLazy||isArray(value);var interceptor=function interceptor(value){var result=lodashFunc.apply(lodash,arrayPush([value],args));return isTaker&&chainAll?result[0]:result;};if(useLazy&&checkIteratee&&typeof iteratee=='function'&&iteratee.length!=1){// Avoid lazy use if the iteratee has a \"length\" value other than `1`.\nisLazy=useLazy=false;}var chainAll=this.__chain__,isHybrid=!!this.__actions__.length,isUnwrapped=retUnwrapped&&!chainAll,onlyLazy=isLazy&&!isHybrid;if(!retUnwrapped&&useLazy){value=onlyLazy?value:new LazyWrapper(this);var result=func.apply(value,args);result.__actions__.push({'func':thru,'args':[interceptor],'thisArg':undefined});return new LodashWrapper(result,chainAll);}if(isUnwrapped&&onlyLazy){return func.apply(this,args);}result=this.thru(interceptor);return isUnwrapped?isTaker?result.value()[0]:result.value():result;};});// Add `Array` methods to `lodash.prototype`.\narrayEach(['pop','push','shift','sort','splice','unshift'],function(methodName){var func=arrayProto[methodName],chainName=/^(?:push|sort|unshift)$/.test(methodName)?'tap':'thru',retUnwrapped=/^(?:pop|shift)$/.test(methodName);lodash.prototype[methodName]=function(){var args=arguments;if(retUnwrapped&&!this.__chain__){var value=this.value();return func.apply(isArray(value)?value:[],args);}return this[chainName](function(value){return func.apply(isArray(value)?value:[],args);});};});// Map minified method names to their real names.\nbaseForOwn(LazyWrapper.prototype,function(func,methodName){var lodashFunc=lodash[methodName];if(lodashFunc){var key=lodashFunc.name+'',names=realNames[key]||(realNames[key]=[]);names.push({'name':methodName,'func':lodashFunc});}});realNames[createHybrid(undefined,WRAP_BIND_KEY_FLAG).name]=[{'name':'wrapper','func':undefined}];// Add methods to `LazyWrapper`.\nLazyWrapper.prototype.clone=lazyClone;LazyWrapper.prototype.reverse=lazyReverse;LazyWrapper.prototype.value=lazyValue;// Add chain sequence methods to the `lodash` wrapper.\nlodash.prototype.at=wrapperAt;lodash.prototype.chain=wrapperChain;lodash.prototype.commit=wrapperCommit;lodash.prototype.next=wrapperNext;lodash.prototype.plant=wrapperPlant;lodash.prototype.reverse=wrapperReverse;lodash.prototype.toJSON=lodash.prototype.valueOf=lodash.prototype.value=wrapperValue;// Add lazy aliases.\nlodash.prototype.first=lodash.prototype.head;if(symIterator){lodash.prototype[symIterator]=wrapperToIterator;}return lodash;};/*--------------------------------------------------------------------------*/// Export lodash.\nvar _=runInContext();// Some AMD build optimizers, like r.js, check for condition patterns like:\nif(typeof define=='function'&&(0,_typeof6.default)(define.amd)=='object'&&define.amd){// Expose Lodash on the global object to prevent errors when Lodash is\n// loaded by a script tag in the presence of an AMD loader.\n// See http://requirejs.org/docs/errors.html#mismatch for more details.\n// Use `_.noConflict` to remove Lodash from the global object.\nroot._=_;// Define as an anonymous module so, through path mapping, it can be\n// referenced as the \"underscore\" module.\ndefine(function(){return _;});}// Check for `exports` after `define` in case a build optimizer adds it.\nelse if(freeModule){// Export for Node.js.\n(freeModule.exports=_)._=_;// Export for CommonJS support.\nfreeExports._=_;}else{// Export to the global object.\nroot._=_;}}).call(this);}).call(this,typeof global!==\"undefined\"?global:typeof self!==\"undefined\"?self:typeof window!==\"undefined\"?window:{});},{}],567:[function(require,module,exports){/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */function noop(){// No operation performed.\n}module.exports=noop;},{}],568:[function(require,module,exports){var baseRepeat=require(\"./_baseRepeat\"),isIterateeCall=require(\"./_isIterateeCall\"),toInteger=require(\"./toInteger\"),toString=require(\"./toString\");/**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */function repeat(string,n,guard){if(guard?isIterateeCall(string,n,guard):n===undefined){n=1;}else{n=toInteger(n);}return baseRepeat(toString(string),n);}module.exports=repeat;},{\"./_baseRepeat\":462,\"./_isIterateeCall\":508,\"./toInteger\":572,\"./toString\":574}],569:[function(require,module,exports){/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */function stubArray(){return[];}module.exports=stubArray;},{}],570:[function(require,module,exports){/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */function stubFalse(){return false;}module.exports=stubFalse;},{}],571:[function(require,module,exports){var toNumber=require(\"./toNumber\");/** Used as references for various `Number` constants. */var INFINITY=1/0,MAX_INTEGER=1.7976931348623157e+308;/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */function toFinite(value){if(!value){return value===0?value:0;}value=toNumber(value);if(value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER;}return value===value?value:0;}module.exports=toFinite;},{\"./toNumber\":573}],572:[function(require,module,exports){var toFinite=require(\"./toFinite\");/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0;}module.exports=toInteger;},{\"./toFinite\":571}],573:[function(require,module,exports){var isObject=require(\"./isObject\"),isSymbol=require(\"./isSymbol\");/** Used as references for various `Number` constants. */var NAN=0/0;/** Used to match leading and trailing whitespace. */var reTrim=/^\\s+|\\s+$/g;/** Used to detect bad signed hexadecimal string values. */var reIsBadHex=/^[-+]0x[0-9a-f]+$/i;/** Used to detect binary string values. */var reIsBinary=/^0b[01]+$/i;/** Used to detect octal string values. */var reIsOctal=/^0o[0-7]+$/i;/** Built-in method references without a dependency on `root`. */var freeParseInt=parseInt;/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */function toNumber(value){if(typeof value=='number'){return value;}if(isSymbol(value)){return NAN;}if(isObject(value)){var other=typeof value.valueOf=='function'?value.valueOf():value;value=isObject(other)?other+'':other;}if(typeof value!='string'){return value===0?value:+value;}value=value.replace(reTrim,'');var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value;}module.exports=toNumber;},{\"./isObject\":557,\"./isSymbol\":562}],574:[function(require,module,exports){var baseToString=require(\"./_baseToString\");/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */function toString(value){return value==null?'':baseToString(value);}module.exports=toString;},{\"./_baseToString\":466}],575:[function(require,module,exports){var baseUniq=require(\"./_baseUniq\");/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */function uniq(array){return array&&array.length?baseUniq(array):[];}module.exports=uniq;},{\"./_baseUniq\":468}],576:[function(require,module,exports){var baseValues=require(\"./_baseValues\"),keys=require(\"./keys\");/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */function values(object){return object==null?[]:baseValues(object,keys(object));}module.exports=values;},{\"./_baseValues\":469,\"./keys\":564}],577:[function(require,module,exports){/**\n * Helpers.\n */var s=1000;var m=s*60;var h=m*60;var d=h*24;var y=d*365.25;/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */module.exports=function(val,options){options=options||{};var type=typeof val===\"undefined\"?\"undefined\":(0,_typeof6.default)(val);if(type==='string'&&val.length>0){return parse(val);}else if(type==='number'&&isNaN(val)===false){return options.long?fmtLong(val):fmtShort(val);}throw new Error('val is not a non-empty string or a valid number. val='+(0,_stringify4.default)(val));};/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */function parse(str){str=String(str);if(str.length>10000){return;}var match=/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);if(!match){return;}var n=parseFloat(match[1]);var type=(match[2]||'ms').toLowerCase();switch(type){case'years':case'year':case'yrs':case'yr':case'y':return n*y;case'days':case'day':case'd':return n*d;case'hours':case'hour':case'hrs':case'hr':case'h':return n*h;case'minutes':case'minute':case'mins':case'min':case'm':return n*m;case'seconds':case'second':case'secs':case'sec':case's':return n*s;case'milliseconds':case'millisecond':case'msecs':case'msec':case'ms':return n;default:return undefined;}}/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */function fmtShort(ms){if(ms>=d){return Math.round(ms/d)+'d';}if(ms>=h){return Math.round(ms/h)+'h';}if(ms>=m){return Math.round(ms/m)+'m';}if(ms>=s){return Math.round(ms/s)+'s';}return ms+'ms';}/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */function fmtLong(ms){return plural(ms,d,'day')||plural(ms,h,'hour')||plural(ms,m,'minute')||plural(ms,s,'second')||ms+' ms';}/**\n * Pluralization helper.\n */function plural(ms,n,name){if(ms<n){return;}if(ms<n*1.5){return Math.floor(ms/n)+' '+name;}return Math.ceil(ms/n)+' '+name+'s';}},{}],578:[function(require,module,exports){/*\n * @version    1.4.0\n * @date       2015-10-26\n * @stability  3 - Stable\n * @author     Lauri Rooden (https://github.com/litejs/natural-compare-lite)\n * @license    MIT License\n */var naturalCompare=function naturalCompare(a,b){var i,codeA,codeB=1,posA=0,posB=0,alphabet=String.alphabet;function getCode(str,pos,code){if(code){for(i=pos;code=getCode(str,i),code<76&&code>65;){++i;}return+str.slice(pos-1,i);}code=alphabet&&alphabet.indexOf(str.charAt(pos));return code>-1?code+76:(code=str.charCodeAt(pos)||0,code<45||code>127)?code:code<46?65// -\n:code<48?code-1:code<58?code+18// 0-9\n:code<65?code-11:code<91?code+11// A-Z\n:code<97?code-37:code<123?code+5// a-z\n:code-63;}if((a+=\"\")!=(b+=\"\"))for(;codeB;){codeA=getCode(a,posA++);codeB=getCode(b,posB++);if(codeA<76&&codeB<76&&codeA>66&&codeB>66){codeA=getCode(a,posA,posA);codeB=getCode(b,posB,posA=i);posB=i;}if(codeA!=codeB)return codeA<codeB?-1:1;}return 0;};try{module.exports=naturalCompare;}catch(e){String.naturalCompare=naturalCompare;}},{}],579:[function(require,module,exports){/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/'use strict';/* eslint-disable no-unused-vars */var getOwnPropertySymbols=_getOwnPropertySymbols4.default;var hasOwnProperty=Object.prototype.hasOwnProperty;var propIsEnumerable=Object.prototype.propertyIsEnumerable;function toObject(val){if(val===null||val===undefined){throw new TypeError('Object.assign cannot be called with null or undefined');}return Object(val);}function shouldUseNative(){try{if(!_assign4.default){return false;}// Detect buggy property enumeration order in older V8 versions.\n// https://bugs.chromium.org/p/v8/issues/detail?id=4118\nvar test1=new String('abc');// eslint-disable-line no-new-wrappers\ntest1[5]='de';if((0,_getOwnPropertyNames2.default)(test1)[0]==='5'){return false;}// https://bugs.chromium.org/p/v8/issues/detail?id=3056\nvar test2={};for(var i=0;i<10;i++){test2['_'+String.fromCharCode(i)]=i;}var order2=(0,_getOwnPropertyNames2.default)(test2).map(function(n){return test2[n];});if(order2.join('')!=='0123456789'){return false;}// https://bugs.chromium.org/p/v8/issues/detail?id=3056\nvar test3={};'abcdefghijklmnopqrst'.split('').forEach(function(letter){test3[letter]=letter;});if((0,_keys4.default)((0,_assign4.default)({},test3)).join('')!=='abcdefghijklmnopqrst'){return false;}return true;}catch(err){// We don't expect any of the above to throw, but better to be safe.\nreturn false;}}module.exports=shouldUseNative()?_assign4.default:function(target,source){var from;var to=toObject(target);var symbols;for(var s=1;s<arguments.length;s++){from=Object(arguments[s]);for(var key in from){if(hasOwnProperty.call(from,key)){to[key]=from[key];}}if(getOwnPropertySymbols){symbols=getOwnPropertySymbols(from);for(var i=0;i<symbols.length;i++){if(propIsEnumerable.call(from,symbols[i])){to[symbols[i]]=from[symbols[i]];}}}}return to;};},{}],580:[function(require,module,exports){'use strict';// modified from https://github.com/es-shims/es5-shim\nvar has=Object.prototype.hasOwnProperty;var toStr=Object.prototype.toString;var slice=Array.prototype.slice;var isArgs=require(\"./isArguments\");var isEnumerable=Object.prototype.propertyIsEnumerable;var hasDontEnumBug=!isEnumerable.call({toString:null},'toString');var hasProtoEnumBug=isEnumerable.call(function(){},'prototype');var dontEnums=['toString','toLocaleString','valueOf','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','constructor'];var equalsConstructorPrototype=function equalsConstructorPrototype(o){var ctor=o.constructor;return ctor&&ctor.prototype===o;};var excludedKeys={$console:true,$external:true,$frame:true,$frameElement:true,$frames:true,$innerHeight:true,$innerWidth:true,$outerHeight:true,$outerWidth:true,$pageXOffset:true,$pageYOffset:true,$parent:true,$scrollLeft:true,$scrollTop:true,$scrollX:true,$scrollY:true,$self:true,$webkitIndexedDB:true,$webkitStorageInfo:true,$window:true};var hasAutomationEqualityBug=function(){/* global window */if(typeof window==='undefined'){return false;}for(var k in window){try{if(!excludedKeys['$'+k]&&has.call(window,k)&&window[k]!==null&&(0,_typeof6.default)(window[k])==='object'){try{equalsConstructorPrototype(window[k]);}catch(e){return true;}}}catch(e){return true;}}return false;}();var equalsConstructorPrototypeIfNotBuggy=function equalsConstructorPrototypeIfNotBuggy(o){/* global window */if(typeof window==='undefined'||!hasAutomationEqualityBug){return equalsConstructorPrototype(o);}try{return equalsConstructorPrototype(o);}catch(e){return false;}};var keysShim=function keys(object){var isObject=object!==null&&(typeof object===\"undefined\"?\"undefined\":(0,_typeof6.default)(object))==='object';var isFunction=toStr.call(object)==='[object Function]';var isArguments=isArgs(object);var isString=isObject&&toStr.call(object)==='[object String]';var theKeys=[];if(!isObject&&!isFunction&&!isArguments){throw new TypeError('Object.keys called on a non-object');}var skipProto=hasProtoEnumBug&&isFunction;if(isString&&object.length>0&&!has.call(object,0)){for(var i=0;i<object.length;++i){theKeys.push(String(i));}}if(isArguments&&object.length>0){for(var j=0;j<object.length;++j){theKeys.push(String(j));}}else{for(var name in object){if(!(skipProto&&name==='prototype')&&has.call(object,name)){theKeys.push(String(name));}}}if(hasDontEnumBug){var skipConstructor=equalsConstructorPrototypeIfNotBuggy(object);for(var k=0;k<dontEnums.length;++k){if(!(skipConstructor&&dontEnums[k]==='constructor')&&has.call(object,dontEnums[k])){theKeys.push(dontEnums[k]);}}}return theKeys;};keysShim.shim=function shimObjectKeys(){if(_keys4.default){var keysWorksWithArguments=function(){// Safari 5.0 bug\nreturn((0,_keys4.default)(arguments)||'').length===2;}(1,2);if(!keysWorksWithArguments){var originalKeys=_keys4.default;Object.keys=function keys(object){if(isArgs(object)){return originalKeys(slice.call(object));}else{return originalKeys(object);}};}}else{Object.keys=keysShim;}return _keys4.default||keysShim;};module.exports=keysShim;},{\"./isArguments\":581}],581:[function(require,module,exports){'use strict';var toStr=Object.prototype.toString;module.exports=function isArguments(value){var str=toStr.call(value);var isArgs=str==='[object Arguments]';if(!isArgs){isArgs=str!=='[object Array]'&&value!==null&&(typeof value===\"undefined\"?\"undefined\":(0,_typeof6.default)(value))==='object'&&typeof value.length==='number'&&value.length>=0&&toStr.call(value.callee)==='[object Function]';}return isArgs;};},{}],582:[function(require,module,exports){'use strict';var keys=require(\"object-keys\");module.exports=function hasSymbols(){if(typeof _symbol4.default!=='function'||typeof _getOwnPropertySymbols4.default!=='function'){return false;}if((0,_typeof6.default)(_iterator22.default)==='symbol'){return true;}var obj={};var sym=(0,_symbol4.default)('test');var symObj=Object(sym);if(typeof sym==='string'){return false;}if(Object.prototype.toString.call(sym)!=='[object Symbol]'){return false;}if(Object.prototype.toString.call(symObj)!=='[object Symbol]'){return false;}// temp disabled per https://github.com/ljharb/object.assign/issues/17\n// if (sym instanceof Symbol) { return false; }\n// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n// if (!(symObj instanceof Symbol)) { return false; }\nvar symVal=42;obj[sym]=symVal;for(sym in obj){return false;}if(keys(obj).length!==0){return false;}if(typeof _keys4.default==='function'&&(0,_keys4.default)(obj).length!==0){return false;}if(typeof _getOwnPropertyNames2.default==='function'&&(0,_getOwnPropertyNames2.default)(obj).length!==0){return false;}var syms=(0,_getOwnPropertySymbols4.default)(obj);if(syms.length!==1||syms[0]!==sym){return false;}if(!Object.prototype.propertyIsEnumerable.call(obj,sym)){return false;}if(typeof _getOwnPropertyDescriptor2.default==='function'){var descriptor=(0,_getOwnPropertyDescriptor2.default)(obj,sym);if(descriptor.value!==symVal||descriptor.enumerable!==true){return false;}}return true;};},{\"object-keys\":580}],583:[function(require,module,exports){'use strict';// modified from https://github.com/es-shims/es6-shim\nvar keys=require(\"object-keys\");var bind=require(\"function-bind\");var canBeObject=function canBeObject(obj){return typeof obj!=='undefined'&&obj!==null;};var hasSymbols=require(\"./hasSymbols\")();var toObject=Object;var push=bind.call(Function.call,Array.prototype.push);var propIsEnumerable=bind.call(Function.call,Object.prototype.propertyIsEnumerable);var originalGetSymbols=hasSymbols?_getOwnPropertySymbols4.default:null;module.exports=function assign(target,source1){if(!canBeObject(target)){throw new TypeError('target must be an object');}var objTarget=toObject(target);var s,source,i,props,syms,value,key;for(s=1;s<arguments.length;++s){source=toObject(arguments[s]);props=keys(source);var getSymbols=hasSymbols&&(_getOwnPropertySymbols4.default||originalGetSymbols);if(getSymbols){syms=getSymbols(source);for(i=0;i<syms.length;++i){key=syms[i];if(propIsEnumerable(source,key)){push(props,key);}}}for(i=0;i<props.length;++i){key=props[i];value=source[key];if(propIsEnumerable(source,key)){objTarget[key]=value;}}}return objTarget;};},{\"./hasSymbols\":582,\"function-bind\":370,\"object-keys\":580}],584:[function(require,module,exports){'use strict';var defineProperties=require(\"define-properties\");var implementation=require(\"./implementation\");var getPolyfill=require(\"./polyfill\");var shim=require(\"./shim\");var polyfill=getPolyfill();defineProperties(polyfill,{implementation:implementation,getPolyfill:getPolyfill,shim:shim});module.exports=polyfill;},{\"./implementation\":583,\"./polyfill\":585,\"./shim\":586,\"define-properties\":181}],585:[function(require,module,exports){'use strict';var implementation=require(\"./implementation\");var lacksProperEnumerationOrder=function lacksProperEnumerationOrder(){if(!_assign4.default){return false;}// v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n// note: this does not detect the bug unless there's 20 characters\nvar str='abcdefghijklmnopqrst';var letters=str.split('');var map={};for(var i=0;i<letters.length;++i){map[letters[i]]=letters[i];}var obj=(0,_assign4.default)({},map);var actual='';for(var k in obj){actual+=k;}return str!==actual;};var assignHasPendingExceptions=function assignHasPendingExceptions(){if(!_assign4.default||!_preventExtensions2.default){return false;}// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n// which is 72% slower than our shim, and Firefox 40's native implementation.\nvar thrower=(0,_preventExtensions2.default)({1:2});try{(0,_assign4.default)(thrower,'xy');}catch(e){return thrower[1]==='y';}return false;};module.exports=function getPolyfill(){if(!_assign4.default){return implementation;}if(lacksProperEnumerationOrder()){return implementation;}if(assignHasPendingExceptions()){return implementation;}return _assign4.default;};},{\"./implementation\":583}],586:[function(require,module,exports){'use strict';var define=require(\"define-properties\");var getPolyfill=require(\"./polyfill\");module.exports=function shimAssign(){var polyfill=getPolyfill();define(Object,{assign:polyfill},{assign:function assign(){return _assign4.default!==polyfill;}});return polyfill;};},{\"./polyfill\":585,\"define-properties\":181}],587:[function(require,module,exports){(function(process){// 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// 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){// if the path tries to go above the root, `up` ends up > 0\nvar up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==='.'){parts.splice(i,1);}else if(last==='..'){parts.splice(i,1);up++;}else if(up){parts.splice(i,1);up--;}}// if the path is allowed to go above the root, restore leading ..s\nif(allowAboveRoot){for(;up--;up){parts.unshift('..');}}return parts;}// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;var splitPath=function splitPath(filename){return splitPathRe.exec(filename).slice(1);};// path.resolve([from ...], to)\n// posix version\nexports.resolve=function(){var resolvedPath='',resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();// Skip empty and invalid entries\nif(typeof path!=='string'){throw new TypeError('Arguments to path.resolve must be strings');}else if(!path){continue;}resolvedPath=path+'/'+resolvedPath;resolvedAbsolute=path.charAt(0)==='/';}// 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// Normalize the path\nresolvedPath=normalizeArray(filter(resolvedPath.split('/'),function(p){return!!p;}),!resolvedAbsolute).join('/');return(resolvedAbsolute?'/':'')+resolvedPath||'.';};// path.normalize(path)\n// posix version\nexports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==='/';// Normalize the path\npath=normalizeArray(filter(path.split('/'),function(p){return!!p;}),!isAbsolute).join('/');if(!path&&!isAbsolute){path='.';}if(path&&trailingSlash){path+='/';}return(isAbsolute?'/':'')+path;};// posix version\nexports.isAbsolute=function(path){return path.charAt(0)==='/';};// posix version\nexports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=='string'){throw new TypeError('Arguments to path.join must be strings');}return p;}).join('/'));};// path.relative(from, to)\n// posix version\nexports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=='')break;}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=='')break;}if(start>end)return[];return arr.slice(start,end-start+1);}var fromParts=trim(from.split('/'));var toParts=trim(to.split('/'));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break;}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push('..');}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join('/');};exports.sep='/';exports.delimiter=':';exports.dirname=function(path){var result=splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){// No dirname whatsoever\nreturn'.';}if(dir){// It has a dirname, strip trailing slash\ndir=dir.substr(0,dir.length-1);}return root+dir;};exports.basename=function(path,ext){var f=splitPath(path)[2];// TODO: make this comparison case-insensitive on windows?\nif(ext&&f.substr(-1*ext.length)===ext){f=f.substr(0,f.length-ext.length);}return f;};exports.extname=function(path){return splitPath(path)[3];};function filter(xs,f){if(xs.filter)return xs.filter(f);var res=[];for(var i=0;i<xs.length;i++){if(f(xs[i],i,xs))res.push(xs[i]);}return res;}// String.prototype.substr - negative index don't work in IE8\nvar substr='ab'.substr(-1)==='b'?function(str,start,len){return str.substr(start,len);}:function(str,start,len){if(start<0)start=str.length+start;return str.substr(start,len);};}).call(this,require(\"_process\"));},{\"_process\":594}],588:[function(require,module,exports){// Generated by LiveScript 1.4.0\nvar apply,curry,flip,fix,over,memoize,slice$=[].slice,toString$={}.toString;apply=curry$(function(f,list){return f.apply(null,list);});curry=function curry(f){return curry$(f);};flip=curry$(function(f,x,y){return f(y,x);});fix=function fix(f){return function(g){return function(){return f(g(g)).apply(null,arguments);};}(function(g){return function(){return f(g(g)).apply(null,arguments);};});};over=curry$(function(f,g,x,y){return f(g(x),g(y));});memoize=function memoize(f){var memo;memo={};return function(){var args,key,arg;args=slice$.call(arguments);key=function(){var i$,ref$,len$,results$=[];for(i$=0,len$=(ref$=args).length;i$<len$;++i$){arg=ref$[i$];results$.push(arg+toString$.call(arg).slice(8,-1));}return results$;}().join('');return memo[key]=key in memo?memo[key]:f.apply(null,args);};};module.exports={curry:curry,flip:flip,fix:fix,apply:apply,over:over,memoize:memoize};function curry$(f,bound){var context,_curry=function _curry(args){return f.length>1?function(){var params=args?args.concat():[];context=bound?context||this:this;return params.push.apply(params,arguments)<f.length&&arguments.length?_curry.call(context,params):f.apply(context,params);}:f;};return _curry();}},{}],589:[function(require,module,exports){// Generated by LiveScript 1.4.0\nvar each,map,compact,filter,reject,partition,find,head,first,tail,last,initial,empty,reverse,unique,uniqueBy,fold,foldl,fold1,foldl1,foldr,foldr1,unfoldr,concat,concatMap,_flatten,difference,intersection,union,countBy,groupBy,andList,orList,any,all,sort,sortWith,sortBy,sum,product,mean,average,maximum,minimum,maximumBy,minimumBy,scan,scanl,scan1,scanl1,scanr,scanr1,slice,take,drop,splitAt,takeWhile,dropWhile,span,breakList,zip,zipWith,zipAll,zipAllWith,at,elemIndex,elemIndices,findIndex,findIndices,toString$={}.toString,slice$=[].slice;each=curry$(function(f,xs){var i$,len$,x;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];f(x);}return xs;});map=curry$(function(f,xs){var i$,len$,x,results$=[];for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];results$.push(f(x));}return results$;});compact=function compact(xs){var i$,len$,x,results$=[];for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(x){results$.push(x);}}return results$;};filter=curry$(function(f,xs){var i$,len$,x,results$=[];for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(f(x)){results$.push(x);}}return results$;});reject=curry$(function(f,xs){var i$,len$,x,results$=[];for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(!f(x)){results$.push(x);}}return results$;});partition=curry$(function(f,xs){var passed,failed,i$,len$,x;passed=[];failed=[];for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];(f(x)?passed:failed).push(x);}return[passed,failed];});find=curry$(function(f,xs){var i$,len$,x;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(f(x)){return x;}}});head=first=function first(xs){return xs[0];};tail=function tail(xs){if(!xs.length){return;}return xs.slice(1);};last=function last(xs){return xs[xs.length-1];};initial=function initial(xs){if(!xs.length){return;}return xs.slice(0,-1);};empty=function empty(xs){return!xs.length;};reverse=function reverse(xs){return xs.concat().reverse();};unique=function unique(xs){var result,i$,len$,x;result=[];for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(!in$(x,result)){result.push(x);}}return result;};uniqueBy=curry$(function(f,xs){var seen,i$,len$,x,val,results$=[];seen=[];for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];val=f(x);if(in$(val,seen)){continue;}seen.push(val);results$.push(x);}return results$;});fold=foldl=curry$(function(f,memo,xs){var i$,len$,x;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];memo=f(memo,x);}return memo;});fold1=foldl1=curry$(function(f,xs){return fold(f,xs[0],xs.slice(1));});foldr=curry$(function(f,memo,xs){var i$,x;for(i$=xs.length-1;i$>=0;--i$){x=xs[i$];memo=f(x,memo);}return memo;});foldr1=curry$(function(f,xs){return foldr(f,xs[xs.length-1],xs.slice(0,-1));});unfoldr=curry$(function(f,b){var result,x,that;result=[];x=b;while((that=f(x))!=null){result.push(that[0]);x=that[1];}return result;});concat=function concat(xss){return[].concat.apply([],xss);};concatMap=curry$(function(f,xs){var x;return[].concat.apply([],function(){var i$,ref$,len$,results$=[];for(i$=0,len$=(ref$=xs).length;i$<len$;++i$){x=ref$[i$];results$.push(f(x));}return results$;}());});_flatten=function flatten(xs){var x;return[].concat.apply([],function(){var i$,ref$,len$,results$=[];for(i$=0,len$=(ref$=xs).length;i$<len$;++i$){x=ref$[i$];if(toString$.call(x).slice(8,-1)==='Array'){results$.push(_flatten(x));}else{results$.push(x);}}return results$;}());};difference=function difference(xs){var yss,results,i$,len$,x,j$,len1$,ys;yss=slice$.call(arguments,1);results=[];outer:for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];for(j$=0,len1$=yss.length;j$<len1$;++j$){ys=yss[j$];if(in$(x,ys)){continue outer;}}results.push(x);}return results;};intersection=function intersection(xs){var yss,results,i$,len$,x,j$,len1$,ys;yss=slice$.call(arguments,1);results=[];outer:for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];for(j$=0,len1$=yss.length;j$<len1$;++j$){ys=yss[j$];if(!in$(x,ys)){continue outer;}}results.push(x);}return results;};union=function union(){var xss,results,i$,len$,xs,j$,len1$,x;xss=slice$.call(arguments);results=[];for(i$=0,len$=xss.length;i$<len$;++i$){xs=xss[i$];for(j$=0,len1$=xs.length;j$<len1$;++j$){x=xs[j$];if(!in$(x,results)){results.push(x);}}}return results;};countBy=curry$(function(f,xs){var results,i$,len$,x,key;results={};for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];key=f(x);if(key in results){results[key]+=1;}else{results[key]=1;}}return results;});groupBy=curry$(function(f,xs){var results,i$,len$,x,key;results={};for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];key=f(x);if(key in results){results[key].push(x);}else{results[key]=[x];}}return results;});andList=function andList(xs){var i$,len$,x;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(!x){return false;}}return true;};orList=function orList(xs){var i$,len$,x;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(x){return true;}}return false;};any=curry$(function(f,xs){var i$,len$,x;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(f(x)){return true;}}return false;});all=curry$(function(f,xs){var i$,len$,x;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];if(!f(x)){return false;}}return true;});sort=function sort(xs){return xs.concat().sort(function(x,y){if(x>y){return 1;}else if(x<y){return-1;}else{return 0;}});};sortWith=curry$(function(f,xs){return xs.concat().sort(f);});sortBy=curry$(function(f,xs){return xs.concat().sort(function(x,y){if(f(x)>f(y)){return 1;}else if(f(x)<f(y)){return-1;}else{return 0;}});});sum=function sum(xs){var result,i$,len$,x;result=0;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];result+=x;}return result;};product=function product(xs){var result,i$,len$,x;result=1;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];result*=x;}return result;};mean=average=function average(xs){var sum,i$,len$,x;sum=0;for(i$=0,len$=xs.length;i$<len$;++i$){x=xs[i$];sum+=x;}return sum/xs.length;};maximum=function maximum(xs){var max,i$,ref$,len$,x;max=xs[0];for(i$=0,len$=(ref$=xs.slice(1)).length;i$<len$;++i$){x=ref$[i$];if(x>max){max=x;}}return max;};minimum=function minimum(xs){var min,i$,ref$,len$,x;min=xs[0];for(i$=0,len$=(ref$=xs.slice(1)).length;i$<len$;++i$){x=ref$[i$];if(x<min){min=x;}}return min;};maximumBy=curry$(function(f,xs){var max,i$,ref$,len$,x;max=xs[0];for(i$=0,len$=(ref$=xs.slice(1)).length;i$<len$;++i$){x=ref$[i$];if(f(x)>f(max)){max=x;}}return max;});minimumBy=curry$(function(f,xs){var min,i$,ref$,len$,x;min=xs[0];for(i$=0,len$=(ref$=xs.slice(1)).length;i$<len$;++i$){x=ref$[i$];if(f(x)<f(min)){min=x;}}return min;});scan=scanl=curry$(function(f,memo,xs){var last,x;last=memo;return[memo].concat(function(){var i$,ref$,len$,results$=[];for(i$=0,len$=(ref$=xs).length;i$<len$;++i$){x=ref$[i$];results$.push(last=f(last,x));}return results$;}());});scan1=scanl1=curry$(function(f,xs){if(!xs.length){return;}return scan(f,xs[0],xs.slice(1));});scanr=curry$(function(f,memo,xs){xs=xs.concat().reverse();return scan(f,memo,xs).reverse();});scanr1=curry$(function(f,xs){if(!xs.length){return;}xs=xs.concat().reverse();return scan(f,xs[0],xs.slice(1)).reverse();});slice=curry$(function(x,y,xs){return xs.slice(x,y);});take=curry$(function(n,xs){if(n<=0){return xs.slice(0,0);}else{return xs.slice(0,n);}});drop=curry$(function(n,xs){if(n<=0){return xs;}else{return xs.slice(n);}});splitAt=curry$(function(n,xs){return[take(n,xs),drop(n,xs)];});takeWhile=curry$(function(p,xs){var len,i;len=xs.length;if(!len){return xs;}i=0;while(i<len&&p(xs[i])){i+=1;}return xs.slice(0,i);});dropWhile=curry$(function(p,xs){var len,i;len=xs.length;if(!len){return xs;}i=0;while(i<len&&p(xs[i])){i+=1;}return xs.slice(i);});span=curry$(function(p,xs){return[takeWhile(p,xs),dropWhile(p,xs)];});breakList=curry$(function(p,xs){return span(compose$(p,not$),xs);});zip=curry$(function(xs,ys){var result,len,i$,len$,i,x;result=[];len=ys.length;for(i$=0,len$=xs.length;i$<len$;++i$){i=i$;x=xs[i$];if(i===len){break;}result.push([x,ys[i]]);}return result;});zipWith=curry$(function(f,xs,ys){var result,len,i$,len$,i,x;result=[];len=ys.length;for(i$=0,len$=xs.length;i$<len$;++i$){i=i$;x=xs[i$];if(i===len){break;}result.push(f(x,ys[i]));}return result;});zipAll=function zipAll(){var xss,minLength,i$,len$,xs,ref$,i,lresult$,j$,results$=[];xss=slice$.call(arguments);minLength=undefined;for(i$=0,len$=xss.length;i$<len$;++i$){xs=xss[i$];minLength<=(ref$=xs.length)||(minLength=ref$);}for(i$=0;i$<minLength;++i$){i=i$;lresult$=[];for(j$=0,len$=xss.length;j$<len$;++j$){xs=xss[j$];lresult$.push(xs[i]);}results$.push(lresult$);}return results$;};zipAllWith=function zipAllWith(f){var xss,minLength,i$,len$,xs,ref$,i,results$=[];xss=slice$.call(arguments,1);minLength=undefined;for(i$=0,len$=xss.length;i$<len$;++i$){xs=xss[i$];minLength<=(ref$=xs.length)||(minLength=ref$);}for(i$=0;i$<minLength;++i$){i=i$;results$.push(f.apply(null,fn$()));}return results$;function fn$(){var i$,ref$,len$,results$=[];for(i$=0,len$=(ref$=xss).length;i$<len$;++i$){xs=ref$[i$];results$.push(xs[i]);}return results$;}};at=curry$(function(n,xs){if(n<0){return xs[xs.length+n];}else{return xs[n];}});elemIndex=curry$(function(el,xs){var i$,len$,i,x;for(i$=0,len$=xs.length;i$<len$;++i$){i=i$;x=xs[i$];if(x===el){return i;}}});elemIndices=curry$(function(el,xs){var i$,len$,i,x,results$=[];for(i$=0,len$=xs.length;i$<len$;++i$){i=i$;x=xs[i$];if(x===el){results$.push(i);}}return results$;});findIndex=curry$(function(f,xs){var i$,len$,i,x;for(i$=0,len$=xs.length;i$<len$;++i$){i=i$;x=xs[i$];if(f(x)){return i;}}});findIndices=curry$(function(f,xs){var i$,len$,i,x,results$=[];for(i$=0,len$=xs.length;i$<len$;++i$){i=i$;x=xs[i$];if(f(x)){results$.push(i);}}return results$;});module.exports={each:each,map:map,filter:filter,compact:compact,reject:reject,partition:partition,find:find,head:head,first:first,tail:tail,last:last,initial:initial,empty:empty,reverse:reverse,difference:difference,intersection:intersection,union:union,countBy:countBy,groupBy:groupBy,fold:fold,fold1:fold1,foldl:foldl,foldl1:foldl1,foldr:foldr,foldr1:foldr1,unfoldr:unfoldr,andList:andList,orList:orList,any:any,all:all,unique:unique,uniqueBy:uniqueBy,sort:sort,sortWith:sortWith,sortBy:sortBy,sum:sum,product:product,mean:mean,average:average,concat:concat,concatMap:concatMap,flatten:_flatten,maximum:maximum,minimum:minimum,maximumBy:maximumBy,minimumBy:minimumBy,scan:scan,scan1:scan1,scanl:scanl,scanl1:scanl1,scanr:scanr,scanr1:scanr1,slice:slice,take:take,drop:drop,splitAt:splitAt,takeWhile:takeWhile,dropWhile:dropWhile,span:span,breakList:breakList,zip:zip,zipWith:zipWith,zipAll:zipAll,zipAllWith:zipAllWith,at:at,elemIndex:elemIndex,elemIndices:elemIndices,findIndex:findIndex,findIndices:findIndices};function curry$(f,bound){var context,_curry=function _curry(args){return f.length>1?function(){var params=args?args.concat():[];context=bound?context||this:this;return params.push.apply(params,arguments)<f.length&&arguments.length?_curry.call(context,params):f.apply(context,params);}:f;};return _curry();}function in$(x,xs){var i=-1,l=xs.length>>>0;while(++i<l){if(x===xs[i])return true;}return false;}function compose$(){var functions=arguments;return function(){var i,result;result=functions[0].apply(this,arguments);for(i=1;i<functions.length;++i){result=functions[i](result);}return result;};}function not$(x){return!x;}},{}],590:[function(require,module,exports){// Generated by LiveScript 1.4.0\nvar max,min,negate,abs,signum,quot,rem,div,mod,recip,pi,tau,exp,sqrt,ln,pow,sin,tan,cos,asin,acos,atan,atan2,truncate,round,ceiling,floor,isItNaN,even,odd,gcd,lcm;max=curry$(function(x$,y$){return x$>y$?x$:y$;});min=curry$(function(x$,y$){return x$<y$?x$:y$;});negate=function negate(x){return-x;};abs=Math.abs;signum=function signum(x){if(x<0){return-1;}else if(x>0){return 1;}else{return 0;}};quot=curry$(function(x,y){return~~(x/y);});rem=curry$(function(x$,y$){return x$%y$;});div=curry$(function(x,y){return Math.floor(x/y);});mod=curry$(function(x$,y$){var ref$;return(x$%(ref$=y$)+ref$)%ref$;});recip=function recip(it){return 1/it;};pi=Math.PI;tau=pi*2;exp=Math.exp;sqrt=Math.sqrt;ln=Math.log;pow=curry$(function(x$,y$){return Math.pow(x$,y$);});sin=Math.sin;tan=Math.tan;cos=Math.cos;asin=Math.asin;acos=Math.acos;atan=Math.atan;atan2=curry$(function(x,y){return Math.atan2(x,y);});truncate=function truncate(x){return~~x;};round=Math.round;ceiling=Math.ceil;floor=Math.floor;isItNaN=function isItNaN(x){return x!==x;};even=function even(x){return x%2===0;};odd=function odd(x){return x%2!==0;};gcd=curry$(function(x,y){var z;x=Math.abs(x);y=Math.abs(y);while(y!==0){z=x%y;x=y;y=z;}return x;});lcm=curry$(function(x,y){return Math.abs(Math.floor(x/gcd(x,y)*y));});module.exports={max:max,min:min,negate:negate,abs:abs,signum:signum,quot:quot,rem:rem,div:div,mod:mod,recip:recip,pi:pi,tau:tau,exp:exp,sqrt:sqrt,ln:ln,pow:pow,sin:sin,tan:tan,cos:cos,acos:acos,asin:asin,atan:atan,atan2:atan2,truncate:truncate,round:round,ceiling:ceiling,floor:floor,isItNaN:isItNaN,even:even,odd:odd,gcd:gcd,lcm:lcm};function curry$(f,bound){var context,_curry=function _curry(args){return f.length>1?function(){var params=args?args.concat():[];context=bound?context||this:this;return params.push.apply(params,arguments)<f.length&&arguments.length?_curry.call(context,params):f.apply(context,params);}:f;};return _curry();}},{}],591:[function(require,module,exports){// Generated by LiveScript 1.4.0\nvar values,keys,pairsToObj,objToPairs,listsToObj,objToLists,empty,each,map,compact,filter,reject,partition,find;values=function values(object){var i$,x,results$=[];for(i$ in object){x=object[i$];results$.push(x);}return results$;};keys=function keys(object){var x,results$=[];for(x in object){results$.push(x);}return results$;};pairsToObj=function pairsToObj(object){var i$,len$,x,resultObj$={};for(i$=0,len$=object.length;i$<len$;++i$){x=object[i$];resultObj$[x[0]]=x[1];}return resultObj$;};objToPairs=function objToPairs(object){var key,value,results$=[];for(key in object){value=object[key];results$.push([key,value]);}return results$;};listsToObj=curry$(function(keys,values){var i$,len$,i,key,resultObj$={};for(i$=0,len$=keys.length;i$<len$;++i$){i=i$;key=keys[i$];resultObj$[key]=values[i];}return resultObj$;});objToLists=function objToLists(object){var keys,values,key,value;keys=[];values=[];for(key in object){value=object[key];keys.push(key);values.push(value);}return[keys,values];};empty=function empty(object){var x;for(x in object){return false;}return true;};each=curry$(function(f,object){var i$,x;for(i$ in object){x=object[i$];f(x);}return object;});map=curry$(function(f,object){var k,x,resultObj$={};for(k in object){x=object[k];resultObj$[k]=f(x);}return resultObj$;});compact=function compact(object){var k,x,resultObj$={};for(k in object){x=object[k];if(x){resultObj$[k]=x;}}return resultObj$;};filter=curry$(function(f,object){var k,x,resultObj$={};for(k in object){x=object[k];if(f(x)){resultObj$[k]=x;}}return resultObj$;});reject=curry$(function(f,object){var k,x,resultObj$={};for(k in object){x=object[k];if(!f(x)){resultObj$[k]=x;}}return resultObj$;});partition=curry$(function(f,object){var passed,failed,k,x;passed={};failed={};for(k in object){x=object[k];(f(x)?passed:failed)[k]=x;}return[passed,failed];});find=curry$(function(f,object){var i$,x;for(i$ in object){x=object[i$];if(f(x)){return x;}}});module.exports={values:values,keys:keys,pairsToObj:pairsToObj,objToPairs:objToPairs,listsToObj:listsToObj,objToLists:objToLists,empty:empty,each:each,map:map,filter:filter,compact:compact,reject:reject,partition:partition,find:find};function curry$(f,bound){var context,_curry=function _curry(args){return f.length>1?function(){var params=args?args.concat():[];context=bound?context||this:this;return params.push.apply(params,arguments)<f.length&&arguments.length?_curry.call(context,params):f.apply(context,params);}:f;};return _curry();}},{}],592:[function(require,module,exports){// Generated by LiveScript 1.4.0\nvar split,join,lines,unlines,words,unwords,chars,unchars,reverse,repeat,capitalize,camelize,dasherize;split=curry$(function(sep,str){return str.split(sep);});join=curry$(function(sep,xs){return xs.join(sep);});lines=function lines(str){if(!str.length){return[];}return str.split('\\n');};unlines=function unlines(it){return it.join('\\n');};words=function words(str){if(!str.length){return[];}return str.split(/[ ]+/);};unwords=function unwords(it){return it.join(' ');};chars=function chars(it){return it.split('');};unchars=function unchars(it){return it.join('');};reverse=function reverse(str){return str.split('').reverse().join('');};repeat=curry$(function(n,str){var result,i$;result='';for(i$=0;i$<n;++i$){result+=str;}return result;});capitalize=function capitalize(str){return str.charAt(0).toUpperCase()+str.slice(1);};camelize=function camelize(it){return it.replace(/[-_]+(.)?/g,function(arg$,c){return(c!=null?c:'').toUpperCase();});};dasherize=function dasherize(str){return str.replace(/([^-A-Z])([A-Z]+)/g,function(arg$,lower,upper){return lower+\"-\"+(upper.length>1?upper:upper.toLowerCase());}).replace(/^([A-Z]+)/,function(arg$,upper){if(upper.length>1){return upper+\"-\";}else{return upper.toLowerCase();}});};module.exports={split:split,join:join,lines:lines,unlines:unlines,words:words,unwords:unwords,chars:chars,unchars:unchars,reverse:reverse,repeat:repeat,capitalize:capitalize,camelize:camelize,dasherize:dasherize};function curry$(f,bound){var context,_curry=function _curry(args){return f.length>1?function(){var params=args?args.concat():[];context=bound?context||this:this;return params.push.apply(params,arguments)<f.length&&arguments.length?_curry.call(context,params):f.apply(context,params);}:f;};return _curry();}},{}],593:[function(require,module,exports){// Generated by LiveScript 1.4.0\nvar Func,List,Obj,Str,Num,id,isType,replicate,prelude,toString$={}.toString;Func=require(\"./Func.js\");List=require(\"./List.js\");Obj=require(\"./Obj.js\");Str=require(\"./Str.js\");Num=require(\"./Num.js\");id=function id(x){return x;};isType=curry$(function(type,x){return toString$.call(x).slice(8,-1)===type;});replicate=curry$(function(n,x){var i$,results$=[];for(i$=0;i$<n;++i$){results$.push(x);}return results$;});Str.empty=List.empty;Str.slice=List.slice;Str.take=List.take;Str.drop=List.drop;Str.splitAt=List.splitAt;Str.takeWhile=List.takeWhile;Str.dropWhile=List.dropWhile;Str.span=List.span;Str.breakStr=List.breakList;prelude={Func:Func,List:List,Obj:Obj,Str:Str,Num:Num,id:id,isType:isType,replicate:replicate};prelude.each=List.each;prelude.map=List.map;prelude.filter=List.filter;prelude.compact=List.compact;prelude.reject=List.reject;prelude.partition=List.partition;prelude.find=List.find;prelude.head=List.head;prelude.first=List.first;prelude.tail=List.tail;prelude.last=List.last;prelude.initial=List.initial;prelude.empty=List.empty;prelude.reverse=List.reverse;prelude.difference=List.difference;prelude.intersection=List.intersection;prelude.union=List.union;prelude.countBy=List.countBy;prelude.groupBy=List.groupBy;prelude.fold=List.fold;prelude.foldl=List.foldl;prelude.fold1=List.fold1;prelude.foldl1=List.foldl1;prelude.foldr=List.foldr;prelude.foldr1=List.foldr1;prelude.unfoldr=List.unfoldr;prelude.andList=List.andList;prelude.orList=List.orList;prelude.any=List.any;prelude.all=List.all;prelude.unique=List.unique;prelude.uniqueBy=List.uniqueBy;prelude.sort=List.sort;prelude.sortWith=List.sortWith;prelude.sortBy=List.sortBy;prelude.sum=List.sum;prelude.product=List.product;prelude.mean=List.mean;prelude.average=List.average;prelude.concat=List.concat;prelude.concatMap=List.concatMap;prelude.flatten=List.flatten;prelude.maximum=List.maximum;prelude.minimum=List.minimum;prelude.maximumBy=List.maximumBy;prelude.minimumBy=List.minimumBy;prelude.scan=List.scan;prelude.scanl=List.scanl;prelude.scan1=List.scan1;prelude.scanl1=List.scanl1;prelude.scanr=List.scanr;prelude.scanr1=List.scanr1;prelude.slice=List.slice;prelude.take=List.take;prelude.drop=List.drop;prelude.splitAt=List.splitAt;prelude.takeWhile=List.takeWhile;prelude.dropWhile=List.dropWhile;prelude.span=List.span;prelude.breakList=List.breakList;prelude.zip=List.zip;prelude.zipWith=List.zipWith;prelude.zipAll=List.zipAll;prelude.zipAllWith=List.zipAllWith;prelude.at=List.at;prelude.elemIndex=List.elemIndex;prelude.elemIndices=List.elemIndices;prelude.findIndex=List.findIndex;prelude.findIndices=List.findIndices;prelude.apply=Func.apply;prelude.curry=Func.curry;prelude.flip=Func.flip;prelude.fix=Func.fix;prelude.over=Func.over;prelude.split=Str.split;prelude.join=Str.join;prelude.lines=Str.lines;prelude.unlines=Str.unlines;prelude.words=Str.words;prelude.unwords=Str.unwords;prelude.chars=Str.chars;prelude.unchars=Str.unchars;prelude.repeat=Str.repeat;prelude.capitalize=Str.capitalize;prelude.camelize=Str.camelize;prelude.dasherize=Str.dasherize;prelude.values=Obj.values;prelude.keys=Obj.keys;prelude.pairsToObj=Obj.pairsToObj;prelude.objToPairs=Obj.objToPairs;prelude.listsToObj=Obj.listsToObj;prelude.objToLists=Obj.objToLists;prelude.max=Num.max;prelude.min=Num.min;prelude.negate=Num.negate;prelude.abs=Num.abs;prelude.signum=Num.signum;prelude.quot=Num.quot;prelude.rem=Num.rem;prelude.div=Num.div;prelude.mod=Num.mod;prelude.recip=Num.recip;prelude.pi=Num.pi;prelude.tau=Num.tau;prelude.exp=Num.exp;prelude.sqrt=Num.sqrt;prelude.ln=Num.ln;prelude.pow=Num.pow;prelude.sin=Num.sin;prelude.tan=Num.tan;prelude.cos=Num.cos;prelude.acos=Num.acos;prelude.asin=Num.asin;prelude.atan=Num.atan;prelude.atan2=Num.atan2;prelude.truncate=Num.truncate;prelude.round=Num.round;prelude.ceiling=Num.ceiling;prelude.floor=Num.floor;prelude.isItNaN=Num.isItNaN;prelude.even=Num.even;prelude.odd=Num.odd;prelude.gcd=Num.gcd;prelude.lcm=Num.lcm;prelude.VERSION='1.1.2';module.exports=prelude;function curry$(f,bound){var context,_curry=function _curry(args){return f.length>1?function(){var params=args?args.concat():[];context=bound?context||this:this;return params.push.apply(params,arguments)<f.length&&arguments.length?_curry.call(context,params):f.apply(context,params);}:f;};return _curry();}},{\"./Func.js\":588,\"./List.js\":589,\"./Num.js\":590,\"./Obj.js\":591,\"./Str.js\":592}],594:[function(require,module,exports){// shim for using process in browser\nvar process=module.exports={};// 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.\nvar cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error('setTimeout has not been defined');}function defaultClearTimeout(){throw new Error('clearTimeout has not been defined');}(function(){try{if(typeof setTimeout==='function'){cachedSetTimeout=setTimeout;}else{cachedSetTimeout=defaultSetTimout;}}catch(e){cachedSetTimeout=defaultSetTimout;}try{if(typeof clearTimeout==='function'){cachedClearTimeout=clearTimeout;}else{cachedClearTimeout=defaultClearTimeout;}}catch(e){cachedClearTimeout=defaultClearTimeout;}})();function runTimeout(fun){if(cachedSetTimeout===setTimeout){//normal enviroments in sane situations\nreturn setTimeout(fun,0);}// if setTimeout wasn't available but was latter defined\nif((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0);}try{// when when somebody has screwed with setTimeout but no I.E. maddness\nreturn cachedSetTimeout(fun,0);}catch(e){try{// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\nreturn cachedSetTimeout.call(null,fun,0);}catch(e){// 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\nreturn cachedSetTimeout.call(this,fun,0);}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){//normal enviroments in sane situations\nreturn clearTimeout(marker);}// if clearTimeout wasn't available but was latter defined\nif((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker);}try{// when when somebody has screwed with setTimeout but no I.E. maddness\nreturn cachedClearTimeout(marker);}catch(e){try{// When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\nreturn cachedClearTimeout.call(null,marker);}catch(e){// 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\nreturn cachedClearTimeout.call(this,marker);}}}var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return;}draining=false;if(currentQueue.length){queue=currentQueue.concat(queue);}else{queueIndex=-1;}if(queue.length){drainQueue();}}function drainQueue(){if(draining){return;}var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run();}}queueIndex=-1;len=queue.length;}currentQueue=null;draining=false;runClearTimeout(timeout);}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i];}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){runTimeout(drainQueue);}};// v8 likes predictible objects\nfunction Item(fun,array){this.fun=fun;this.array=array;}Item.prototype.run=function(){this.fun.apply(null,this.array);};process.title='browser';process.browser=true;process.env={};process.argv=[];process.version='';// empty string to avoid regexp issues\nprocess.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error('process.binding is not supported');};process.cwd=function(){return'/';};process.chdir=function(dir){throw new Error('process.chdir is not supported');};process.umask=function(){return 0;};},{}],595:[function(require,module,exports){'use strict';var ansiRegex=require(\"ansi-regex\")();module.exports=function(str){return typeof str==='string'?str.replace(ansiRegex,''):str;};},{\"ansi-regex\":5}],596:[function(require,module,exports){'use strict';module.exports=function toFastProperties(obj){function f(){}f.prototype=obj;new f();return;eval(obj);};},{}],597:[function(require,module,exports){// Generated by LiveScript 1.4.0\n(function(){var ref$,any,all,isItNaN,types,defaultType,customTypes,toString$={}.toString;ref$=require(\"prelude-ls\"),any=ref$.any,all=ref$.all,isItNaN=ref$.isItNaN;types={Number:{typeOf:'Number',validate:function validate(it){return!isItNaN(it);}},NaN:{typeOf:'Number',validate:isItNaN},Int:{typeOf:'Number',validate:function validate(it){return!isItNaN(it)&&it%1===0;}},Float:{typeOf:'Number',validate:function validate(it){return!isItNaN(it);}},Date:{typeOf:'Date',validate:function validate(it){return!isItNaN(it.getTime());}}};defaultType={array:'Array',tuple:'Array'};function checkArray(input,type){return all(function(it){return checkMultiple(it,type.of);},input);}function checkTuple(input,type){var i,i$,ref$,len$,types;i=0;for(i$=0,len$=(ref$=type.of).length;i$<len$;++i$){types=ref$[i$];if(!checkMultiple(input[i],types)){return false;}i++;}return input.length<=i;}function checkFields(input,type){var inputKeys,numInputKeys,k,numOfKeys,key,ref$,types;inputKeys={};numInputKeys=0;for(k in input){inputKeys[k]=true;numInputKeys++;}numOfKeys=0;for(key in ref$=type.of){types=ref$[key];if(!checkMultiple(input[key],types)){return false;}if(inputKeys[key]){numOfKeys++;}}return type.subset||numInputKeys===numOfKeys;}function checkStructure(input,type){if(!(input instanceof Object)){return false;}switch(type.structure){case'fields':return checkFields(input,type);case'array':return checkArray(input,type);case'tuple':return checkTuple(input,type);}}function check(input,typeObj){var type,structure,setting,that;type=typeObj.type,structure=typeObj.structure;if(type){if(type==='*'){return true;}setting=customTypes[type]||types[type];if(setting){return setting.typeOf===toString$.call(input).slice(8,-1)&&setting.validate(input);}else{return type===toString$.call(input).slice(8,-1)&&(!structure||checkStructure(input,typeObj));}}else if(structure){if(that=defaultType[structure]){if(that!==toString$.call(input).slice(8,-1)){return false;}}return checkStructure(input,typeObj);}else{throw new Error(\"No type defined. Input: \"+input+\".\");}}function checkMultiple(input,types){if(toString$.call(types).slice(8,-1)!=='Array'){throw new Error(\"Types must be in an array. Input: \"+input+\".\");}return any(function(it){return check(input,it);},types);}module.exports=function(parsedType,input,options){options==null&&(options={});customTypes=options.customTypes||{};return checkMultiple(input,parsedType);};}).call(this);},{\"prelude-ls\":593}],598:[function(require,module,exports){// Generated by LiveScript 1.4.0\n(function(){var VERSION,parseType,parsedTypeCheck,typeCheck;VERSION='0.3.2';parseType=require(\"./parse-type\");parsedTypeCheck=require(\"./check\");typeCheck=function typeCheck(type,input,options){return parsedTypeCheck(parseType(type),input,options);};module.exports={VERSION:VERSION,typeCheck:typeCheck,parsedTypeCheck:parsedTypeCheck,parseType:parseType};}).call(this);},{\"./check\":597,\"./parse-type\":599}],599:[function(require,module,exports){// Generated by LiveScript 1.4.0\n(function(){var identifierRegex,tokenRegex;identifierRegex=/[\\$\\w]+/;function peek(tokens){var token;token=tokens[0];if(token==null){throw new Error('Unexpected end of input.');}return token;}function consumeIdent(tokens){var token;token=peek(tokens);if(!identifierRegex.test(token)){throw new Error(\"Expected text, got '\"+token+\"' instead.\");}return tokens.shift();}function consumeOp(tokens,op){var token;token=peek(tokens);if(token!==op){throw new Error(\"Expected '\"+op+\"', got '\"+token+\"' instead.\");}return tokens.shift();}function maybeConsumeOp(tokens,op){var token;token=tokens[0];if(token===op){return tokens.shift();}else{return null;}}function consumeArray(tokens){var types;consumeOp(tokens,'[');if(peek(tokens)===']'){throw new Error(\"Must specify type of Array - eg. [Type], got [] instead.\");}types=consumeTypes(tokens);consumeOp(tokens,']');return{structure:'array',of:types};}function consumeTuple(tokens){var components;components=[];consumeOp(tokens,'(');if(peek(tokens)===')'){throw new Error(\"Tuple must be of at least length 1 - eg. (Type), got () instead.\");}for(;;){components.push(consumeTypes(tokens));maybeConsumeOp(tokens,',');if(')'===peek(tokens)){break;}}consumeOp(tokens,')');return{structure:'tuple',of:components};}function consumeFields(tokens){var fields,subset,ref$,key,types;fields={};consumeOp(tokens,'{');subset=false;for(;;){if(maybeConsumeOp(tokens,'...')){subset=true;break;}ref$=consumeField(tokens),key=ref$[0],types=ref$[1];fields[key]=types;maybeConsumeOp(tokens,',');if('}'===peek(tokens)){break;}}consumeOp(tokens,'}');return{structure:'fields',of:fields,subset:subset};}function consumeField(tokens){var key,types;key=consumeIdent(tokens);consumeOp(tokens,':');types=consumeTypes(tokens);return[key,types];}function maybeConsumeStructure(tokens){switch(tokens[0]){case'[':return consumeArray(tokens);case'(':return consumeTuple(tokens);case'{':return consumeFields(tokens);}}function consumeType(tokens){var token,wildcard,type,structure;token=peek(tokens);wildcard=token==='*';if(wildcard||identifierRegex.test(token)){type=wildcard?consumeOp(tokens,'*'):consumeIdent(tokens);structure=maybeConsumeStructure(tokens);if(structure){return structure.type=type,structure;}else{return{type:type};}}else{structure=maybeConsumeStructure(tokens);if(!structure){throw new Error(\"Unexpected character: \"+token);}return structure;}}function consumeTypes(tokens){var lookahead,types,typesSoFar,typeObj,type;if('::'===peek(tokens)){throw new Error(\"No comment before comment separator '::' found.\");}lookahead=tokens[1];if(lookahead!=null&&lookahead==='::'){tokens.shift();tokens.shift();}types=[];typesSoFar={};if('Maybe'===peek(tokens)){tokens.shift();types=[{type:'Undefined'},{type:'Null'}];typesSoFar={Undefined:true,Null:true};}for(;;){typeObj=consumeType(tokens),type=typeObj.type;if(!typesSoFar[type]){types.push(typeObj);}typesSoFar[type]=true;if(!maybeConsumeOp(tokens,'|')){break;}}return types;}tokenRegex=RegExp('\\\\.\\\\.\\\\.|::|->|'+identifierRegex.source+'|\\\\S','g');module.exports=function(input){var tokens,e;if(!input.length){throw new Error('No type specified.');}tokens=input.match(tokenRegex)||[];if(in$('->',tokens)){throw new Error(\"Function types are not supported.\\ To validate that something is a function, you may use 'Function'.\");}try{return consumeTypes(tokens);}catch(e$){e=e$;throw new Error(e.message+\" - Remaining tokens: \"+(0,_stringify4.default)(tokens)+\" - Initial input: '\"+input+\"'\");}};function in$(x,xs){var i=-1,l=xs.length>>>0;while(++i<l){if(x===xs[i])return true;}return false;}}).call(this);},{}],600:[function(require,module,exports){if(typeof _create4.default==='function'){// implementation from standard node.js 'util' module\nmodule.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=(0,_create4.default)(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}});};}else{// old school shim for old browsers\nmodule.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function TempCtor(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor();ctor.prototype.constructor=ctor;};}},{}],601:[function(require,module,exports){module.exports=function isBuffer(arg){return arg&&(typeof arg===\"undefined\"?\"undefined\":(0,_typeof6.default)(arg))==='object'&&typeof arg.copy==='function'&&typeof arg.fill==='function'&&typeof arg.readUInt8==='function';};},{}],602:[function(require,module,exports){(function(process,global){// 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.\nvar formatRegExp=/%[sdj%]/g;exports.format=function(f){if(!isString(f)){var objects=[];for(var i=0;i<arguments.length;i++){objects.push(inspect(arguments[i]));}return objects.join(' ');}var i=1;var args=arguments;var len=args.length;var str=String(f).replace(formatRegExp,function(x){if(x==='%%')return'%';if(i>=len)return x;switch(x){case'%s':return String(args[i++]);case'%d':return Number(args[i++]);case'%j':try{return(0,_stringify4.default)(args[i++]);}catch(_){return'[Circular]';}default:return x;}});for(var x=args[i];i<len;x=args[++i]){if(isNull(x)||!isObject(x)){str+=' '+x;}else{str+=' '+inspect(x);}}return str;};// 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){// Allow for deprecating things in the process of starting up.\nif(isUndefined(global.process)){return function(){return exports.deprecate(fn,msg).apply(this,arguments);};}if(process.noDeprecation===true){return fn;}var warned=false;function deprecated(){if(!warned){if(process.throwDeprecation){throw new Error(msg);}else if(process.traceDeprecation){console.trace(msg);}else{console.error(msg);}warned=true;}return fn.apply(this,arguments);}return deprecated;};var debugs={};var debugEnviron;exports.debuglog=function(set){if(isUndefined(debugEnviron))debugEnviron=process.env.NODE_DEBUG||'';set=set.toUpperCase();if(!debugs[set]){if(new RegExp('\\\\b'+set+'\\\\b','i').test(debugEnviron)){var pid=process.pid;debugs[set]=function(){var msg=exports.format.apply(exports,arguments);console.error('%s %d: %s',set,pid,msg);};}else{debugs[set]=function(){};}}return debugs[set];};/**\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 *//* legacy: obj, showHidden, depth, colors*/function inspect(obj,opts){// default options\nvar ctx={seen:[],stylize:stylizeNoColor};// legacy...\nif(arguments.length>=3)ctx.depth=arguments[2];if(arguments.length>=4)ctx.colors=arguments[3];if(isBoolean(opts)){// legacy...\nctx.showHidden=opts;}else if(opts){// got an \"options\" object\nexports._extend(ctx,opts);}// set default options\nif(isUndefined(ctx.showHidden))ctx.showHidden=false;if(isUndefined(ctx.depth))ctx.depth=2;if(isUndefined(ctx.colors))ctx.colors=false;if(isUndefined(ctx.customInspect))ctx.customInspect=true;if(ctx.colors)ctx.stylize=stylizeWithColor;return formatValue(ctx,obj,ctx.depth);}exports.inspect=inspect;// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors={'bold':[1,22],'italic':[3,23],'underline':[4,24],'inverse':[7,27],'white':[37,39],'grey':[90,39],'black':[30,39],'blue':[34,39],'cyan':[36,39],'green':[32,39],'magenta':[35,39],'red':[31,39],'yellow':[33,39]};// Don't use 'blue' not visible on cmd.exe\ninspect.styles={'special':'cyan','number':'yellow','boolean':'yellow','undefined':'grey','null':'bold','string':'green','date':'magenta',// \"name\": intentionally not styling\n'regexp':'red'};function stylizeWithColor(str,styleType){var style=inspect.styles[styleType];if(style){return\"\\x1B[\"+inspect.colors[style][0]+'m'+str+\"\\x1B[\"+inspect.colors[style][1]+'m';}else{return str;}}function stylizeNoColor(str,styleType){return str;}function arrayToHash(array){var hash={};array.forEach(function(val,idx){hash[val]=true;});return hash;}function formatValue(ctx,value,recurseTimes){// Provide a hook for user-specified inspect functions.\n// Check that value is an object with an inspect function on it\nif(ctx.customInspect&&value&&isFunction(value.inspect)&&// Filter out the util module, it's inspect function is special\nvalue.inspect!==exports.inspect&&// Also filter out any prototype objects using the circular check.\n!(value.constructor&&value.constructor.prototype===value)){var ret=value.inspect(recurseTimes,ctx);if(!isString(ret)){ret=formatValue(ctx,ret,recurseTimes);}return ret;}// Primitive types cannot have properties\nvar primitive=formatPrimitive(ctx,value);if(primitive){return primitive;}// Look up the keys of the object.\nvar keys=(0,_keys4.default)(value);var visibleKeys=arrayToHash(keys);if(ctx.showHidden){keys=(0,_getOwnPropertyNames2.default)(value);}// IE doesn't make error fields non-enumerable\n// http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\nif(isError(value)&&(keys.indexOf('message')>=0||keys.indexOf('description')>=0)){return formatError(value);}// Some type of object without properties can be shortcutted.\nif(keys.length===0){if(isFunction(value)){var name=value.name?': '+value.name:'';return ctx.stylize('[Function'+name+']','special');}if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),'regexp');}if(isDate(value)){return ctx.stylize(Date.prototype.toString.call(value),'date');}if(isError(value)){return formatError(value);}}var base='',array=false,braces=['{','}'];// Make Array say that they are Array\nif(isArray(value)){array=true;braces=['[',']'];}// Make functions say that they are functions\nif(isFunction(value)){var n=value.name?': '+value.name:'';base=' [Function'+n+']';}// Make RegExps say that they are RegExps\nif(isRegExp(value)){base=' '+RegExp.prototype.toString.call(value);}// Make dates with properties first say the date\nif(isDate(value)){base=' '+Date.prototype.toUTCString.call(value);}// Make error with message first say the error\nif(isError(value)){base=' '+formatError(value);}if(keys.length===0&&(!array||value.length==0)){return braces[0]+base+braces[1];}if(recurseTimes<0){if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),'regexp');}else{return ctx.stylize('[Object]','special');}}ctx.seen.push(value);var output;if(array){output=formatArray(ctx,value,recurseTimes,visibleKeys,keys);}else{output=keys.map(function(key){return formatProperty(ctx,value,recurseTimes,visibleKeys,key,array);});}ctx.seen.pop();return reduceToSingleString(output,base,braces);}function formatPrimitive(ctx,value){if(isUndefined(value))return ctx.stylize('undefined','undefined');if(isString(value)){var simple='\\''+(0,_stringify4.default)(value).replace(/^\"|\"$/g,'').replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+'\\'';return ctx.stylize(simple,'string');}if(isNumber(value))return ctx.stylize(''+value,'number');if(isBoolean(value))return ctx.stylize(''+value,'boolean');// For some reason typeof null is \"object\", so special case here.\nif(isNull(value))return ctx.stylize('null','null');}function formatError(value){return'['+Error.prototype.toString.call(value)+']';}function formatArray(ctx,value,recurseTimes,visibleKeys,keys){var output=[];for(var i=0,l=value.length;i<l;++i){if(hasOwnProperty(value,String(i))){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,String(i),true));}else{output.push('');}}keys.forEach(function(key){if(!key.match(/^\\d+$/)){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,key,true));}});return output;}function formatProperty(ctx,value,recurseTimes,visibleKeys,key,array){var name,str,desc;desc=(0,_getOwnPropertyDescriptor2.default)(value,key)||{value:value[key]};if(desc.get){if(desc.set){str=ctx.stylize('[Getter/Setter]','special');}else{str=ctx.stylize('[Getter]','special');}}else{if(desc.set){str=ctx.stylize('[Setter]','special');}}if(!hasOwnProperty(visibleKeys,key)){name='['+key+']';}if(!str){if(ctx.seen.indexOf(desc.value)<0){if(isNull(recurseTimes)){str=formatValue(ctx,desc.value,null);}else{str=formatValue(ctx,desc.value,recurseTimes-1);}if(str.indexOf('\\n')>-1){if(array){str=str.split('\\n').map(function(line){return'  '+line;}).join('\\n').substr(2);}else{str='\\n'+str.split('\\n').map(function(line){return'   '+line;}).join('\\n');}}}else{str=ctx.stylize('[Circular]','special');}}if(isUndefined(name)){if(array&&key.match(/^\\d+$/)){return str;}name=(0,_stringify4.default)(''+key);if(name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)){name=name.substr(1,name.length-2);name=ctx.stylize(name,'name');}else{name=name.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\");name=ctx.stylize(name,'string');}}return name+': '+str;}function reduceToSingleString(output,base,braces){var numLinesEst=0;var length=output.reduce(function(prev,cur){numLinesEst++;if(cur.indexOf('\\n')>=0)numLinesEst++;return prev+cur.replace(/\\u001b\\[\\d\\d?m/g,'').length+1;},0);if(length>60){return braces[0]+(base===''?'':base+'\\n ')+' '+output.join(',\\n  ')+' '+braces[1];}return braces[0]+base+' '+output.join(', ')+' '+braces[1];}// 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){return Array.isArray(ar);}exports.isArray=isArray;function isBoolean(arg){return typeof arg==='boolean';}exports.isBoolean=isBoolean;function isNull(arg){return arg===null;}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null;}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==='number';}exports.isNumber=isNumber;function isString(arg){return typeof arg==='string';}exports.isString=isString;function isSymbol(arg){return(typeof arg===\"undefined\"?\"undefined\":(0,_typeof6.default)(arg))==='symbol';}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0;}exports.isUndefined=isUndefined;function isRegExp(re){return isObject(re)&&objectToString(re)==='[object RegExp]';}exports.isRegExp=isRegExp;function isObject(arg){return(typeof arg===\"undefined\"?\"undefined\":(0,_typeof6.default)(arg))==='object'&&arg!==null;}exports.isObject=isObject;function isDate(d){return isObject(d)&&objectToString(d)==='[object Date]';}exports.isDate=isDate;function isError(e){return isObject(e)&&(objectToString(e)==='[object Error]'||e instanceof Error);}exports.isError=isError;function isFunction(arg){return typeof arg==='function';}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==='boolean'||typeof arg==='number'||typeof arg==='string'||(typeof arg===\"undefined\"?\"undefined\":(0,_typeof6.default)(arg))==='symbol'||// ES6 symbol\ntypeof arg==='undefined';}exports.isPrimitive=isPrimitive;exports.isBuffer=require(\"./support/isBuffer\");function objectToString(o){return Object.prototype.toString.call(o);}function pad(n){return n<10?'0'+n.toString(10):n.toString(10);}var months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];// 26 Feb 16:19:34\nfunction timestamp(){var d=new Date();var time=[pad(d.getHours()),pad(d.getMinutes()),pad(d.getSeconds())].join(':');return[d.getDate(),months[d.getMonth()],time].join(' ');}// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log=function(){console.log('%s - %s',timestamp(),exports.format.apply(exports,arguments));};/**\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 */exports.inherits=require(\"inherits\");exports._extend=function(origin,add){// Don't do anything if add isn't an object\nif(!add||!isObject(add))return origin;var keys=(0,_keys4.default)(add);var i=keys.length;while(i--){origin[keys[i]]=add[keys[i]];}return origin;};function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop);}}).call(this,require(\"_process\"),typeof global!==\"undefined\"?global:typeof self!==\"undefined\"?self:typeof window!==\"undefined\"?window:{});},{\"./support/isBuffer\":601,\"_process\":594,\"inherits\":600}],603:[function(require,module,exports){module.exports=extend;var hasOwnProperty=Object.prototype.hasOwnProperty;function extend(){var target={};for(var i=0;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;}},{}],604:[function(require,module,exports){module.exports={\"name\":\"eslint\",\"version\":\"3.19.0\",\"author\":\"Nicholas C. Zakas <nicholas+npm@nczconsulting.com>\",\"description\":\"An AST-based pattern checker for JavaScript.\",\"bin\":{\"eslint\":\"./bin/eslint.js\"},\"main\":\"./lib/api.js\",\"scripts\":{\"test\":\"node Makefile.js test\",\"lint\":\"node Makefile.js lint\",\"release\":\"node Makefile.js release\",\"ci-release\":\"node Makefile.js ciRelease\",\"alpharelease\":\"node Makefile.js prerelease -- alpha\",\"betarelease\":\"node Makefile.js prerelease -- beta\",\"docs\":\"node Makefile.js docs\",\"gensite\":\"node Makefile.js gensite\",\"browserify\":\"node Makefile.js browserify\",\"perf\":\"node Makefile.js perf\",\"profile\":\"beefy tests/bench/bench.js --open -- -t brfs -t ./tests/bench/xform-rules.js -r espree\",\"coveralls\":\"cat ./coverage/lcov.info | coveralls\",\"check-commit\":\"node Makefile.js checkGitCommit\"},\"files\":[\"LICENSE\",\"README.md\",\"bin\",\"conf\",\"lib\",\"messages\"],\"repository\":\"eslint/eslint\",\"homepage\":\"http://eslint.org\",\"bugs\":\"https://github.com/eslint/eslint/issues/\",\"dependencies\":{\"babel-code-frame\":\"^6.16.0\",\"babel-eslint\":\"^7.1.1\",\"chalk\":\"^1.1.3\",\"concat-stream\":\"^1.5.2\",\"debug\":\"^2.1.1\",\"doctrine\":\"^2.0.0\",\"escope\":\"^3.6.0\",\"espree\":\"^3.4.0\",\"esquery\":\"^1.0.0\",\"eslint-plugin-babel\":\"^4.1.0\",\"eslint-plugin-react\":\"^6.10.0\",\"eslint-plugin-react-native\":\"^2.2.1\",\"estraverse\":\"^4.2.0\",\"esutils\":\"^2.0.2\",\"file-entry-cache\":\"^2.0.0\",\"glob\":\"^7.0.3\",\"globals\":\"^9.14.0\",\"ignore\":\"^3.2.0\",\"imurmurhash\":\"^0.1.4\",\"inquirer\":\"^0.12.0\",\"is-my-json-valid\":\"^2.10.0\",\"is-resolvable\":\"^1.0.0\",\"js-yaml\":\"^3.5.1\",\"json-stable-stringify\":\"^1.0.0\",\"levn\":\"^0.3.0\",\"lodash\":\"^4.0.0\",\"mkdirp\":\"^0.5.0\",\"natural-compare\":\"^1.4.0\",\"optionator\":\"^0.8.2\",\"path-is-inside\":\"^1.0.1\",\"pluralize\":\"^1.2.1\",\"progress\":\"^1.1.8\",\"require-uncached\":\"^1.0.2\",\"shelljs\":\"^0.7.5\",\"strip-bom\":\"^3.0.0\",\"strip-json-comments\":\"~2.0.1\",\"table\":\"^3.7.8\",\"text-table\":\"~0.2.0\",\"user-home\":\"^2.0.0\"},\"devDependencies\":{\"babel-preset-es2015\":\"^6.24.0\",\"babelify\":\"^7.3.0\",\"beefy\":\"^2.1.8\",\"brfs\":\"1.4.3\",\"browserify\":\"^14.1.0\",\"chai\":\"^3.5.0\",\"cheerio\":\"^0.22.0\",\"coveralls\":\"^2.12.0\",\"dateformat\":\"^2.0.0\",\"ejs\":\"^2.5.6\",\"eslint-plugin-eslint-plugin\":\"^0.7.1\",\"eslint-plugin-node\":\"^4.2.1\",\"eslint-release\":\"^0.10.1\",\"esprima\":\"^3.1.3\",\"esprima-fb\":\"^15001.1001.0-dev-harmony-fb\",\"istanbul\":\"^0.4.5\",\"jsdoc\":\"^3.4.3\",\"karma\":\"^1.5.0\",\"karma-babel-preprocessor\":\"^6.0.1\",\"karma-mocha\":\"^1.3.0\",\"karma-mocha-reporter\":\"^2.2.2\",\"karma-phantomjs-launcher\":\"^1.0.4\",\"leche\":\"^2.1.2\",\"load-perf\":\"^0.2.0\",\"markdownlint\":\"^0.4.0\",\"mocha\":\"^3.2.0\",\"mock-fs\":\"^4.2.0\",\"npm-license\":\"^0.3.3\",\"phantomjs-prebuilt\":\"^2.1.14\",\"proxyquire\":\"^1.7.11\",\"semver\":\"^5.3.0\",\"shelljs-nodecli\":\"~0.1.1\",\"sinon\":\"^2.0.0\",\"temp\":\"^0.8.3\",\"through\":\"^2.3.8\"},\"keywords\":[\"ast\",\"lint\",\"javascript\",\"ecmascript\",\"espree\"],\"license\":\"MIT\",\"engines\":{\"node\":\">=4\"}};},{}],605:[function(require,module,exports){/**\n * @fileoverview Common utils for AST.\n * @author Gyandeep Singh\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar esutils=require(\"esutils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar anyFunctionPattern=/^(?:Function(?:Declaration|Expression)|ArrowFunctionExpression)$/;var anyLoopPattern=/^(?:DoWhile|For|ForIn|ForOf|While)Statement$/;var arrayOrTypedArrayPattern=/Array$/;var arrayMethodPattern=/^(?:every|filter|find|findIndex|forEach|map|some)$/;var bindOrCallOrApplyPattern=/^(?:bind|call|apply)$/;var breakableTypePattern=/^(?:(?:Do)?While|For(?:In|Of)?|Switch)Statement$/;var thisTagPattern=/^[\\s*]*@this/m;var COMMENTS_IGNORE_PATTERN=/^\\s*(?:eslint|jshint\\s+|jslint\\s+|istanbul\\s+|globals?\\s+|exported\\s+|jscs)/;var LINEBREAKS=new _set3.default([\"\\r\\n\",\"\\r\",\"\\n\",\"\\u2028\",\"\\u2029\"]);var LINEBREAK_MATCHER=/\\r\\n|[\\r\\n\\u2028\\u2029]/;// A set of node types that can contain a list of statements\nvar STATEMENT_LIST_PARENTS=new _set3.default([\"Program\",\"BlockStatement\",\"SwitchCase\"]);/**\n * Checks reference if is non initializer and writable.\n * @param {Reference} reference - A reference to check.\n * @param {int} index - The index of the reference in the references.\n * @param {Reference[]} references - The array that the reference belongs to.\n * @returns {boolean} Success/Failure\n * @private\n */function isModifyingReference(reference,index,references){var identifier=reference.identifier;/*\n     * Destructuring assignments can have multiple default value, so\n     * possibly there are multiple writeable references for the same\n     * identifier.\n     */var modifyingDifferentIdentifier=index===0||references[index-1].identifier!==identifier;return identifier&&reference.init===false&&reference.isWrite()&&modifyingDifferentIdentifier;}/**\n * Checks whether the given string starts with uppercase or not.\n *\n * @param {string} s - The string to check.\n * @returns {boolean} `true` if the string starts with uppercase.\n */function startsWithUpperCase(s){return s[0]!==s[0].toLocaleLowerCase();}/**\n * Checks whether or not a node is a constructor.\n * @param {ASTNode} node - A function node to check.\n * @returns {boolean} Wehether or not a node is a constructor.\n */function isES5Constructor(node){return node.id&&startsWithUpperCase(node.id.name);}/**\n * Finds a function node from ancestors of a node.\n * @param {ASTNode} node - A start node to find.\n * @returns {Node|null} A found function node.\n */function getUpperFunction(node){while(node){if(anyFunctionPattern.test(node.type)){return node;}node=node.parent;}return null;}/**\n * Checks whether a given node is a function node or not.\n * The following types are function nodes:\n *\n * - ArrowFunctionExpression\n * - FunctionDeclaration\n * - FunctionExpression\n *\n * @param {ASTNode|null} node - A node to check.\n * @returns {boolean} `true` if the node is a function node.\n */function isFunction(node){return Boolean(node&&anyFunctionPattern.test(node.type));}/**\n * Checks whether a given node is a loop node or not.\n * The following types are loop nodes:\n *\n * - DoWhileStatement\n * - ForInStatement\n * - ForOfStatement\n * - ForStatement\n * - WhileStatement\n *\n * @param {ASTNode|null} node - A node to check.\n * @returns {boolean} `true` if the node is a loop node.\n */function isLoop(node){return Boolean(node&&anyLoopPattern.test(node.type));}/**\n * Checks whether the given node is in a loop or not.\n *\n * @param {ASTNode} node - The node to check.\n * @returns {boolean} `true` if the node is in a loop.\n */function isInLoop(node){while(node&&!isFunction(node)){if(isLoop(node)){return true;}node=node.parent;}return false;}/**\n * Checks whether or not a node is `null` or `undefined`.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is a `null` or `undefined`.\n * @public\n */function isNullOrUndefined(node){return module.exports.isNullLiteral(node)||node.type===\"Identifier\"&&node.name===\"undefined\"||node.type===\"UnaryExpression\"&&node.operator===\"void\";}/**\n * Checks whether or not a node is callee.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is callee.\n */function isCallee(node){return node.parent.type===\"CallExpression\"&&node.parent.callee===node;}/**\n * Checks whether or not a node is `Reflect.apply`.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is a `Reflect.apply`.\n */function isReflectApply(node){return node.type===\"MemberExpression\"&&node.object.type===\"Identifier\"&&node.object.name===\"Reflect\"&&node.property.type===\"Identifier\"&&node.property.name===\"apply\"&&node.computed===false;}/**\n * Checks whether or not a node is `Array.from`.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is a `Array.from`.\n */function isArrayFromMethod(node){return node.type===\"MemberExpression\"&&node.object.type===\"Identifier\"&&arrayOrTypedArrayPattern.test(node.object.name)&&node.property.type===\"Identifier\"&&node.property.name===\"from\"&&node.computed===false;}/**\n * Checks whether or not a node is a method which has `thisArg`.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} Whether or not the node is a method which has `thisArg`.\n */function isMethodWhichHasThisArg(node){while(node){if(node.type===\"Identifier\"){return arrayMethodPattern.test(node.name);}if(node.type===\"MemberExpression\"&&!node.computed){node=node.property;continue;}break;}return false;}/**\n * Creates the negate function of the given function.\n * @param {Function} f - The function to negate.\n * @returns {Function} Negated function.\n */function negate(f){return function(token){return!f(token);};}/**\n * Checks whether or not a node has a `@this` tag in its comments.\n * @param {ASTNode} node - A node to check.\n * @param {SourceCode} sourceCode - A SourceCode instance to get comments.\n * @returns {boolean} Whether or not the node has a `@this` tag in its comments.\n */function hasJSDocThisTag(node,sourceCode){var jsdocComment=sourceCode.getJSDocComment(node);if(jsdocComment&&thisTagPattern.test(jsdocComment.value)){return true;}// Checks `@this` in its leading comments for callbacks,\n// because callbacks don't have its JSDoc comment.\n// e.g.\n//     sinon.test(/* @this sinon.Sandbox */function() { this.spy(); });\nreturn sourceCode.getComments(node).leading.some(function(comment){return thisTagPattern.test(comment.value);});}/**\n * Determines if a node is surrounded by parentheses.\n * @param {SourceCode} sourceCode The ESLint source code object\n * @param {ASTNode} node The node to be checked.\n * @returns {boolean} True if the node is parenthesised.\n * @private\n */function isParenthesised(sourceCode,node){var previousToken=sourceCode.getTokenBefore(node),nextToken=sourceCode.getTokenAfter(node);return Boolean(previousToken&&nextToken)&&previousToken.value===\"(\"&&previousToken.range[1]<=node.range[0]&&nextToken.value===\")\"&&nextToken.range[0]>=node.range[1];}/**\n * Checks if the given token is an arrow token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is an arrow token.\n */function isArrowToken(token){return token.value===\"=>\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is a comma token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a comma token.\n */function isCommaToken(token){return token.value===\",\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is a semicolon token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a semicolon token.\n */function isSemicolonToken(token){return token.value===\";\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is a colon token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a colon token.\n */function isColonToken(token){return token.value===\":\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is an opening parenthesis token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is an opening parenthesis token.\n */function isOpeningParenToken(token){return token.value===\"(\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is a closing parenthesis token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a closing parenthesis token.\n */function isClosingParenToken(token){return token.value===\")\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is an opening square bracket token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is an opening square bracket token.\n */function isOpeningBracketToken(token){return token.value===\"[\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is a closing square bracket token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a closing square bracket token.\n */function isClosingBracketToken(token){return token.value===\"]\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is an opening brace token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is an opening brace token.\n */function isOpeningBraceToken(token){return token.value===\"{\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is a closing brace token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a closing brace token.\n */function isClosingBraceToken(token){return token.value===\"}\"&&token.type===\"Punctuator\";}/**\n * Checks if the given token is a comment token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a comment token.\n */function isCommentToken(token){return token.type===\"Line\"||token.type===\"Block\"||token.type===\"Shebang\";}/**\n * Checks if the given token is a keyword token or not.\n *\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a keyword token.\n */function isKeywordToken(token){return token.type===\"Keyword\";}/**\n * Gets the `(` token of the given function node.\n *\n * @param {ASTNode} node - The function node to get.\n * @param {SourceCode} sourceCode - The source code object to get tokens.\n * @returns {Token} `(` token.\n */function getOpeningParenOfParams(node,sourceCode){return node.id?sourceCode.getTokenAfter(node.id,isOpeningParenToken):sourceCode.getFirstToken(node,isOpeningParenToken);}/**\n * Creates a version of the LINEBREAK_MATCHER regex with the global flag.\n * Global regexes are mutable, so this needs to be a function instead of a constant.\n * @returns {RegExp} A global regular expression that matches line terminators\n */function createGlobalLinebreakMatcher(){return new RegExp(LINEBREAK_MATCHER.source,\"g\");}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\nmodule.exports={COMMENTS_IGNORE_PATTERN:COMMENTS_IGNORE_PATTERN,LINEBREAKS:LINEBREAKS,LINEBREAK_MATCHER:LINEBREAK_MATCHER,STATEMENT_LIST_PARENTS:STATEMENT_LIST_PARENTS,/**\n     * Determines whether two adjacent tokens are on the same line.\n     * @param {Object} left - The left token object.\n     * @param {Object} right - The right token object.\n     * @returns {boolean} Whether or not the tokens are on the same line.\n     * @public\n     */isTokenOnSameLine:function isTokenOnSameLine(left,right){return left.loc.end.line===right.loc.start.line;},isNullOrUndefined:isNullOrUndefined,isCallee:isCallee,isES5Constructor:isES5Constructor,getUpperFunction:getUpperFunction,isFunction:isFunction,isLoop:isLoop,isInLoop:isInLoop,isArrayFromMethod:isArrayFromMethod,isParenthesised:isParenthesised,createGlobalLinebreakMatcher:createGlobalLinebreakMatcher,isArrowToken:isArrowToken,isClosingBraceToken:isClosingBraceToken,isClosingBracketToken:isClosingBracketToken,isClosingParenToken:isClosingParenToken,isColonToken:isColonToken,isCommaToken:isCommaToken,isCommentToken:isCommentToken,isKeywordToken:isKeywordToken,isNotClosingBraceToken:negate(isClosingBraceToken),isNotClosingBracketToken:negate(isClosingBracketToken),isNotClosingParenToken:negate(isClosingParenToken),isNotColonToken:negate(isColonToken),isNotCommaToken:negate(isCommaToken),isNotOpeningBraceToken:negate(isOpeningBraceToken),isNotOpeningBracketToken:negate(isOpeningBracketToken),isNotOpeningParenToken:negate(isOpeningParenToken),isNotSemicolonToken:negate(isSemicolonToken),isOpeningBraceToken:isOpeningBraceToken,isOpeningBracketToken:isOpeningBracketToken,isOpeningParenToken:isOpeningParenToken,isSemicolonToken:isSemicolonToken,/**\n     * Checks whether or not a given node is a string literal.\n     * @param {ASTNode} node - A node to check.\n     * @returns {boolean} `true` if the node is a string literal.\n     */isStringLiteral:function isStringLiteral(node){return node.type===\"Literal\"&&typeof node.value===\"string\"||node.type===\"TemplateLiteral\";},/**\n     * Checks whether a given node is a breakable statement or not.\n     * The node is breakable if the node is one of the following type:\n     *\n     * - DoWhileStatement\n     * - ForInStatement\n     * - ForOfStatement\n     * - ForStatement\n     * - SwitchStatement\n     * - WhileStatement\n     *\n     * @param {ASTNode} node - A node to check.\n     * @returns {boolean} `true` if the node is breakable.\n     */isBreakableStatement:function isBreakableStatement(node){return breakableTypePattern.test(node.type);},/**\n     * Gets the label if the parent node of a given node is a LabeledStatement.\n     *\n     * @param {ASTNode} node - A node to get.\n     * @returns {string|null} The label or `null`.\n     */getLabel:function getLabel(node){if(node.parent.type===\"LabeledStatement\"){return node.parent.label.name;}return null;},/**\n     * Gets references which are non initializer and writable.\n     * @param {Reference[]} references - An array of references.\n     * @returns {Reference[]} An array of only references which are non initializer and writable.\n     * @public\n     */getModifyingReferences:function getModifyingReferences(references){return references.filter(isModifyingReference);},/**\n     * Validate that a string passed in is surrounded by the specified character\n     * @param  {string} val The text to check.\n     * @param  {string} character The character to see if it's surrounded by.\n     * @returns {boolean} True if the text is surrounded by the character, false if not.\n     * @private\n     */isSurroundedBy:function isSurroundedBy(val,character){return val[0]===character&&val[val.length-1]===character;},/**\n     * Returns whether the provided node is an ESLint directive comment or not\n     * @param {LineComment|BlockComment} node The node to be checked\n     * @returns {boolean} `true` if the node is an ESLint directive comment\n     */isDirectiveComment:function isDirectiveComment(node){var comment=node.value.trim();return node.type===\"Line\"&&comment.indexOf(\"eslint-\")===0||node.type===\"Block\"&&(comment.indexOf(\"global \")===0||comment.indexOf(\"eslint \")===0||comment.indexOf(\"eslint-\")===0);},/**\n     * Gets the trailing statement of a given node.\n     *\n     *     if (code)\n     *         consequent;\n     *\n     * When taking this `IfStatement`, returns `consequent;` statement.\n     *\n     * @param {ASTNode} A node to get.\n     * @returns {ASTNode|null} The trailing statement's node.\n     */getTrailingStatement:esutils.ast.trailingStatement,/**\n     * Finds the variable by a given name in a given scope and its upper scopes.\n     *\n     * @param {escope.Scope} initScope - A scope to start find.\n     * @param {string} name - A variable name to find.\n     * @returns {escope.Variable|null} A found variable or `null`.\n     */getVariableByName:function getVariableByName(initScope,name){var scope=initScope;while(scope){var variable=scope.set.get(name);if(variable){return variable;}scope=scope.upper;}return null;},/**\n     * Checks whether or not a given function node is the default `this` binding.\n     *\n     * First, this checks the node:\n     *\n     * - The function name does not start with uppercase (it's a constructor).\n     * - The function does not have a JSDoc comment that has a @this tag.\n     *\n     * Next, this checks the location of the node.\n     * If the location is below, this judges `this` is valid.\n     *\n     * - The location is not on an object literal.\n     * - The location is not assigned to a variable which starts with an uppercase letter.\n     * - The location is not on an ES2015 class.\n     * - Its `bind`/`call`/`apply` method is not called directly.\n     * - The function is not a callback of array methods (such as `.forEach()`) if `thisArg` is given.\n     *\n     * @param {ASTNode} node - A function node to check.\n     * @param {SourceCode} sourceCode - A SourceCode instance to get comments.\n     * @returns {boolean} The function node is the default `this` binding.\n     */isDefaultThisBinding:function isDefaultThisBinding(node,sourceCode){if(isES5Constructor(node)||hasJSDocThisTag(node,sourceCode)){return false;}var isAnonymous=node.id===null;while(node){var parent=node.parent;switch(parent.type){/*\n                 * Looks up the destination.\n                 * e.g., obj.foo = nativeFoo || function foo() { ... };\n                 */case\"LogicalExpression\":case\"ConditionalExpression\":node=parent;break;// If the upper function is IIFE, checks the destination of the return value.\n// e.g.\n//   obj.foo = (function() {\n//     // setup...\n//     return function foo() { ... };\n//   })();\ncase\"ReturnStatement\":{var func=getUpperFunction(parent);if(func===null||!isCallee(func)){return true;}node=func.parent;break;}// e.g.\n//   var obj = { foo() { ... } };\n//   var obj = { foo: function() { ... } };\n//   class A { constructor() { ... } }\n//   class A { foo() { ... } }\n//   class A { get foo() { ... } }\n//   class A { set foo() { ... } }\n//   class A { static foo() { ... } }\ncase\"Property\":case\"MethodDefinition\":return parent.value!==node;// e.g.\n//   obj.foo = function foo() { ... };\n//   Foo = function() { ... };\n//   [obj.foo = function foo() { ... }] = a;\n//   [Foo = function() { ... }] = a;\ncase\"AssignmentExpression\":case\"AssignmentPattern\":if(parent.right===node){if(parent.left.type===\"MemberExpression\"){return false;}if(isAnonymous&&parent.left.type===\"Identifier\"&&startsWithUpperCase(parent.left.name)){return false;}}return true;// e.g.\n//   var Foo = function() { ... };\ncase\"VariableDeclarator\":return!(isAnonymous&&parent.init===node&&parent.id.type===\"Identifier\"&&startsWithUpperCase(parent.id.name));// e.g.\n//   var foo = function foo() { ... }.bind(obj);\n//   (function foo() { ... }).call(obj);\n//   (function foo() { ... }).apply(obj, []);\ncase\"MemberExpression\":return parent.object!==node||parent.property.type!==\"Identifier\"||!bindOrCallOrApplyPattern.test(parent.property.name)||!isCallee(parent)||parent.parent.arguments.length===0||isNullOrUndefined(parent.parent.arguments[0]);// e.g.\n//   Reflect.apply(function() {}, obj, []);\n//   Array.from([], function() {}, obj);\n//   list.forEach(function() {}, obj);\ncase\"CallExpression\":if(isReflectApply(parent.callee)){return parent.arguments.length!==3||parent.arguments[0]!==node||isNullOrUndefined(parent.arguments[1]);}if(isArrayFromMethod(parent.callee)){return parent.arguments.length!==3||parent.arguments[1]!==node||isNullOrUndefined(parent.arguments[2]);}if(isMethodWhichHasThisArg(parent.callee)){return parent.arguments.length!==2||parent.arguments[0]!==node||isNullOrUndefined(parent.arguments[1]);}return true;// Otherwise `this` is default.\ndefault:return true;}}/* istanbul ignore next */return true;},/**\n     * Get the precedence level based on the node type\n     * @param {ASTNode} node node to evaluate\n     * @returns {int} precedence level\n     * @private\n     */getPrecedence:function getPrecedence(node){switch(node.type){case\"SequenceExpression\":return 0;case\"AssignmentExpression\":case\"ArrowFunctionExpression\":case\"YieldExpression\":return 1;case\"ConditionalExpression\":return 3;case\"LogicalExpression\":switch(node.operator){case\"||\":return 4;case\"&&\":return 5;// no default\n}/* falls through */case\"BinaryExpression\":switch(node.operator){case\"|\":return 6;case\"^\":return 7;case\"&\":return 8;case\"==\":case\"!=\":case\"===\":case\"!==\":return 9;case\"<\":case\"<=\":case\">\":case\">=\":case\"in\":case\"instanceof\":return 10;case\"<<\":case\">>\":case\">>>\":return 11;case\"+\":case\"-\":return 12;case\"*\":case\"/\":case\"%\":return 13;case\"**\":return 15;// no default\n}/* falls through */case\"UnaryExpression\":case\"AwaitExpression\":return 16;case\"UpdateExpression\":return 17;case\"CallExpression\":// IIFE is allowed to have parens in any position (#655)\nif(node.callee.type===\"FunctionExpression\"){return-1;}return 18;case\"NewExpression\":return 19;// no default\n}return 20;},/**\n     * Checks whether the given node is an empty block node or not.\n     *\n     * @param {ASTNode|null} node - The node to check.\n     * @returns {boolean} `true` if the node is an empty block.\n     */isEmptyBlock:function isEmptyBlock(node){return Boolean(node&&node.type===\"BlockStatement\"&&node.body.length===0);},/**\n     * Checks whether the given node is an empty function node or not.\n     *\n     * @param {ASTNode|null} node - The node to check.\n     * @returns {boolean} `true` if the node is an empty function.\n     */isEmptyFunction:function isEmptyFunction(node){return isFunction(node)&&module.exports.isEmptyBlock(node.body);},/**\n     * Gets the property name of a given node.\n     * The node can be a MemberExpression, a Property, or a MethodDefinition.\n     *\n     * If the name is dynamic, this returns `null`.\n     *\n     * For examples:\n     *\n     *     a.b           // => \"b\"\n     *     a[\"b\"]        // => \"b\"\n     *     a['b']        // => \"b\"\n     *     a[`b`]        // => \"b\"\n     *     a[100]        // => \"100\"\n     *     a[b]          // => null\n     *     a[\"a\" + \"b\"]  // => null\n     *     a[tag`b`]     // => null\n     *     a[`${b}`]     // => null\n     *\n     *     let a = {b: 1}            // => \"b\"\n     *     let a = {[\"b\"]: 1}        // => \"b\"\n     *     let a = {['b']: 1}        // => \"b\"\n     *     let a = {[`b`]: 1}        // => \"b\"\n     *     let a = {[100]: 1}        // => \"100\"\n     *     let a = {[b]: 1}          // => null\n     *     let a = {[\"a\" + \"b\"]: 1}  // => null\n     *     let a = {[tag`b`]: 1}     // => null\n     *     let a = {[`${b}`]: 1}     // => null\n     *\n     * @param {ASTNode} node - The node to get.\n     * @returns {string|null} The property name if static. Otherwise, null.\n     */getStaticPropertyName:function getStaticPropertyName(node){var prop=void 0;switch(node&&node.type){case\"Property\":case\"MethodDefinition\":prop=node.key;break;case\"MemberExpression\":prop=node.property;break;// no default\n}switch(prop&&prop.type){case\"Literal\":return String(prop.value);case\"TemplateLiteral\":if(prop.expressions.length===0&&prop.quasis.length===1){return prop.quasis[0].value.cooked;}break;case\"Identifier\":if(!node.computed){return prop.name;}break;// no default\n}return null;},/**\n     * Get directives from directive prologue of a Program or Function node.\n     * @param {ASTNode} node - The node to check.\n     * @returns {ASTNode[]} The directives found in the directive prologue.\n     */getDirectivePrologue:function getDirectivePrologue(node){var directives=[];// Directive prologues only occur at the top of files or functions.\nif(node.type===\"Program\"||node.type===\"FunctionDeclaration\"||node.type===\"FunctionExpression\"||// Do not check arrow functions with implicit return.\n// `() => \"use strict\";` returns the string `\"use strict\"`.\nnode.type===\"ArrowFunctionExpression\"&&node.body.type===\"BlockStatement\"){var statements=node.type===\"Program\"?node.body:node.body.body;var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=(0,_getIterator5.default)(statements),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var statement=_step.value;if(statement.type===\"ExpressionStatement\"&&statement.expression.type===\"Literal\"){directives.push(statement);}else{break;}}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}}return directives;},/**\n     * Determines whether this node is a decimal integer literal. If a node is a decimal integer literal, a dot added\n     after the node will be parsed as a decimal point, rather than a property-access dot.\n     * @param {ASTNode} node - The node to check.\n     * @returns {boolean} `true` if this node is a decimal integer.\n     * @example\n     *\n     * 5       // true\n     * 5.      // false\n     * 5.0     // false\n     * 05      // false\n     * 0x5     // false\n     * 0b101   // false\n     * 0o5     // false\n     * 5e0     // false\n     * '5'     // false\n     */isDecimalInteger:function isDecimalInteger(node){return node.type===\"Literal\"&&typeof node.value===\"number\"&&/^(0|[1-9]\\d*)$/.test(node.raw);},/**\n     * Gets the name and kind of the given function node.\n     *\n     * - `function foo() {}`  .................... `function 'foo'`\n     * - `(function foo() {})`  .................. `function 'foo'`\n     * - `(function() {})`  ...................... `function`\n     * - `function* foo() {}`  ................... `generator function 'foo'`\n     * - `(function* foo() {})`  ................. `generator function 'foo'`\n     * - `(function*() {})`  ..................... `generator function`\n     * - `() => {}`  ............................. `arrow function`\n     * - `async () => {}`  ....................... `async arrow function`\n     * - `({ foo: function foo() {} })`  ......... `method 'foo'`\n     * - `({ foo: function() {} })`  ............. `method 'foo'`\n     * - `({ ['foo']: function() {} })`  ......... `method 'foo'`\n     * - `({ [foo]: function() {} })`  ........... `method`\n     * - `({ foo() {} })`  ....................... `method 'foo'`\n     * - `({ foo: function* foo() {} })`  ........ `generator method 'foo'`\n     * - `({ foo: function*() {} })`  ............ `generator method 'foo'`\n     * - `({ ['foo']: function*() {} })`  ........ `generator method 'foo'`\n     * - `({ [foo]: function*() {} })`  .......... `generator method`\n     * - `({ *foo() {} })`  ...................... `generator method 'foo'`\n     * - `({ foo: async function foo() {} })`  ... `async method 'foo'`\n     * - `({ foo: async function() {} })`  ....... `async method 'foo'`\n     * - `({ ['foo']: async function() {} })`  ... `async method 'foo'`\n     * - `({ [foo]: async function() {} })`  ..... `async method`\n     * - `({ async foo() {} })`  ................. `async method 'foo'`\n     * - `({ get foo() {} })`  ................... `getter 'foo'`\n     * - `({ set foo(a) {} })`  .................. `setter 'foo'`\n     * - `class A { constructor() {} }`  ......... `constructor`\n     * - `class A { foo() {} }`  ................. `method 'foo'`\n     * - `class A { *foo() {} }`  ................ `generator method 'foo'`\n     * - `class A { async foo() {} }`  ........... `async method 'foo'`\n     * - `class A { ['foo']() {} }`  ............. `method 'foo'`\n     * - `class A { *['foo']() {} }`  ............ `generator method 'foo'`\n     * - `class A { async ['foo']() {} }`  ....... `async method 'foo'`\n     * - `class A { [foo]() {} }`  ............... `method`\n     * - `class A { *[foo]() {} }`  .............. `generator method`\n     * - `class A { async [foo]() {} }`  ......... `async method`\n     * - `class A { get foo() {} }`  ............. `getter 'foo'`\n     * - `class A { set foo(a) {} }`  ............ `setter 'foo'`\n     * - `class A { static foo() {} }`  .......... `static method 'foo'`\n     * - `class A { static *foo() {} }`  ......... `static generator method 'foo'`\n     * - `class A { static async foo() {} }`  .... `static async method 'foo'`\n     * - `class A { static get foo() {} }`  ...... `static getter 'foo'`\n     * - `class A { static set foo(a) {} }`  ..... `static setter 'foo'`\n     *\n     * @param {ASTNode} node - The function node to get.\n     * @returns {string} The name and kind of the function node.\n     */getFunctionNameWithKind:function getFunctionNameWithKind(node){var parent=node.parent;var tokens=[];if(parent.type===\"MethodDefinition\"&&parent.static){tokens.push(\"static\");}if(node.async){tokens.push(\"async\");}if(node.generator){tokens.push(\"generator\");}if(node.type===\"ArrowFunctionExpression\"){tokens.push(\"arrow\",\"function\");}else if(parent.type===\"Property\"||parent.type===\"MethodDefinition\"){if(parent.kind===\"constructor\"){return\"constructor\";}else if(parent.kind===\"get\"){tokens.push(\"getter\");}else if(parent.kind===\"set\"){tokens.push(\"setter\");}else{tokens.push(\"method\");}}else{tokens.push(\"function\");}if(node.id){tokens.push(\"'\"+node.id.name+\"'\");}else{var name=module.exports.getStaticPropertyName(parent);if(name){tokens.push(\"'\"+name+\"'\");}}return tokens.join(\" \");},/**\n     * Gets the location of the given function node for reporting.\n     *\n     * - `function foo() {}`\n     *    ^^^^^^^^^^^^\n     * - `(function foo() {})`\n     *     ^^^^^^^^^^^^\n     * - `(function() {})`\n     *     ^^^^^^^^\n     * - `function* foo() {}`\n     *    ^^^^^^^^^^^^^\n     * - `(function* foo() {})`\n     *     ^^^^^^^^^^^^^\n     * - `(function*() {})`\n     *     ^^^^^^^^^\n     * - `() => {}`\n     *       ^^\n     * - `async () => {}`\n     *             ^^\n     * - `({ foo: function foo() {} })`\n     *       ^^^^^^^^^^^^^^^^^\n     * - `({ foo: function() {} })`\n     *       ^^^^^^^^^^^^^\n     * - `({ ['foo']: function() {} })`\n     *       ^^^^^^^^^^^^^^^^^\n     * - `({ [foo]: function() {} })`\n     *       ^^^^^^^^^^^^^^^\n     * - `({ foo() {} })`\n     *       ^^^\n     * - `({ foo: function* foo() {} })`\n     *       ^^^^^^^^^^^^^^^^^^\n     * - `({ foo: function*() {} })`\n     *       ^^^^^^^^^^^^^^\n     * - `({ ['foo']: function*() {} })`\n     *       ^^^^^^^^^^^^^^^^^^\n     * - `({ [foo]: function*() {} })`\n     *       ^^^^^^^^^^^^^^^^\n     * - `({ *foo() {} })`\n     *       ^^^^\n     * - `({ foo: async function foo() {} })`\n     *       ^^^^^^^^^^^^^^^^^^^^^^^\n     * - `({ foo: async function() {} })`\n     *       ^^^^^^^^^^^^^^^^^^^\n     * - `({ ['foo']: async function() {} })`\n     *       ^^^^^^^^^^^^^^^^^^^^^^^\n     * - `({ [foo]: async function() {} })`\n     *       ^^^^^^^^^^^^^^^^^^^^^\n     * - `({ async foo() {} })`\n     *       ^^^^^^^^^\n     * - `({ get foo() {} })`\n     *       ^^^^^^^\n     * - `({ set foo(a) {} })`\n     *       ^^^^^^^\n     * - `class A { constructor() {} }`\n     *              ^^^^^^^^^^^\n     * - `class A { foo() {} }`\n     *              ^^^\n     * - `class A { *foo() {} }`\n     *              ^^^^\n     * - `class A { async foo() {} }`\n     *              ^^^^^^^^^\n     * - `class A { ['foo']() {} }`\n     *              ^^^^^^^\n     * - `class A { *['foo']() {} }`\n     *              ^^^^^^^^\n     * - `class A { async ['foo']() {} }`\n     *              ^^^^^^^^^^^^^\n     * - `class A { [foo]() {} }`\n     *              ^^^^^\n     * - `class A { *[foo]() {} }`\n     *              ^^^^^^\n     * - `class A { async [foo]() {} }`\n     *              ^^^^^^^^^^^\n     * - `class A { get foo() {} }`\n     *              ^^^^^^^\n     * - `class A { set foo(a) {} }`\n     *              ^^^^^^^\n     * - `class A { static foo() {} }`\n     *              ^^^^^^^^^^\n     * - `class A { static *foo() {} }`\n     *              ^^^^^^^^^^^\n     * - `class A { static async foo() {} }`\n     *              ^^^^^^^^^^^^^^^^\n     * - `class A { static get foo() {} }`\n     *              ^^^^^^^^^^^^^^\n     * - `class A { static set foo(a) {} }`\n     *              ^^^^^^^^^^^^^^\n     *\n     * @param {ASTNode} node - The function node to get.\n     * @param {SourceCode} sourceCode - The source code object to get tokens.\n     * @returns {string} The location of the function node for reporting.\n     */getFunctionHeadLoc:function getFunctionHeadLoc(node,sourceCode){var parent=node.parent;var start=null;var end=null;if(node.type===\"ArrowFunctionExpression\"){var arrowToken=sourceCode.getTokenBefore(node.body,isArrowToken);start=arrowToken.loc.start;end=arrowToken.loc.end;}else if(parent.type===\"Property\"||parent.type===\"MethodDefinition\"){start=parent.loc.start;end=getOpeningParenOfParams(node,sourceCode).loc.start;}else{start=node.loc.start;end=getOpeningParenOfParams(node,sourceCode).loc.start;}return{start:(0,_assign4.default)({},start),end:(0,_assign4.default)({},end)};},/**\n    * Gets the parenthesized text of a node. This is similar to sourceCode.getText(node), but it also includes any parentheses\n    * surrounding the node.\n    * @param {SourceCode} sourceCode The source code object\n    * @param {ASTNode} node An expression node\n    * @returns {string} The text representing the node, with all surrounding parentheses included\n    */getParenthesisedText:function getParenthesisedText(sourceCode,node){var leftToken=sourceCode.getFirstToken(node);var rightToken=sourceCode.getLastToken(node);while(sourceCode.getTokenBefore(leftToken)&&sourceCode.getTokenBefore(leftToken).type===\"Punctuator\"&&sourceCode.getTokenBefore(leftToken).value===\"(\"&&sourceCode.getTokenAfter(rightToken)&&sourceCode.getTokenAfter(rightToken).type===\"Punctuator\"&&sourceCode.getTokenAfter(rightToken).value===\")\"){leftToken=sourceCode.getTokenBefore(leftToken);rightToken=sourceCode.getTokenAfter(rightToken);}return sourceCode.getText().slice(leftToken.range[0],rightToken.range[1]);},/*\n     * Determine if a node has a possiblity to be an Error object\n     * @param  {ASTNode} node  ASTNode to check\n     * @returns {boolean} True if there is a chance it contains an Error obj\n     */couldBeError:function couldBeError(node){switch(node.type){case\"Identifier\":case\"CallExpression\":case\"NewExpression\":case\"MemberExpression\":case\"TaggedTemplateExpression\":case\"YieldExpression\":case\"AwaitExpression\":return true;// possibly an error object.\ncase\"AssignmentExpression\":return module.exports.couldBeError(node.right);case\"SequenceExpression\":{var exprs=node.expressions;return exprs.length!==0&&module.exports.couldBeError(exprs[exprs.length-1]);}case\"LogicalExpression\":return module.exports.couldBeError(node.left)||module.exports.couldBeError(node.right);case\"ConditionalExpression\":return module.exports.couldBeError(node.consequent)||module.exports.couldBeError(node.alternate);default:return false;}},/**\n     * Determines whether the given node is a `null` literal.\n     * @param {ASTNode} node The node to check\n     * @returns {boolean} `true` if the node is a `null` literal\n     */isNullLiteral:function isNullLiteral(node){/*\n         * Checking `node.value === null` does not guarantee that a literal is a null literal.\n         * When parsing values that cannot be represented in the current environment (e.g. unicode\n         * regexes in Node 4), `node.value` is set to `null` because it wouldn't be possible to\n         * set `node.value` to a unicode regex. To make sure a literal is actually `null`, check\n         * `node.regex` instead. Also see: https://github.com/eslint/eslint/issues/8020\n         */return node.type===\"Literal\"&&node.value===null&&!node.regex;}};},{\"esutils\":365}],606:[function(require,module,exports){/**\n * @fileoverview A class of the code path analyzer.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var assert=require(\"assert\"),CodePath=require(\"./code-path\"),CodePathSegment=require(\"./code-path-segment\"),IdGenerator=require(\"./id-generator\"),debug=require(\"./debug-helpers\"),astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given node is a `case` node (not `default` node).\n *\n * @param {ASTNode} node - A `SwitchCase` node to check.\n * @returns {boolean} `true` if the node is a `case` node (not `default` node).\n */function isCaseNode(node){return Boolean(node.test);}/**\n * Checks whether or not a given logical expression node goes different path\n * between the `true` case and the `false` case.\n *\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node is a test of a choice statement.\n */function isForkingByTrueOrFalse(node){var parent=node.parent;switch(parent.type){case\"ConditionalExpression\":case\"IfStatement\":case\"WhileStatement\":case\"DoWhileStatement\":case\"ForStatement\":return parent.test===node;case\"LogicalExpression\":return true;default:return false;}}/**\n * Gets the boolean value of a given literal node.\n *\n * This is used to detect infinity loops (e.g. `while (true) {}`).\n * Statements preceded by an infinity loop are unreachable if the loop didn't\n * have any `break` statement.\n *\n * @param {ASTNode} node - A node to get.\n * @returns {boolean|undefined} a boolean value if the node is a Literal node,\n *   otherwise `undefined`.\n */function getBooleanValueIfSimpleConstant(node){if(node.type===\"Literal\"){return Boolean(node.value);}return void 0;}/**\n * Checks that a given identifier node is a reference or not.\n *\n * This is used to detect the first throwable node in a `try` block.\n *\n * @param {ASTNode} node - An Identifier node to check.\n * @returns {boolean} `true` if the node is a reference.\n */function isIdentifierReference(node){var parent=node.parent;switch(parent.type){case\"LabeledStatement\":case\"BreakStatement\":case\"ContinueStatement\":case\"ArrayPattern\":case\"RestElement\":case\"ImportSpecifier\":case\"ImportDefaultSpecifier\":case\"ImportNamespaceSpecifier\":case\"CatchClause\":return false;case\"FunctionDeclaration\":case\"FunctionExpression\":case\"ArrowFunctionExpression\":case\"ClassDeclaration\":case\"ClassExpression\":case\"VariableDeclarator\":return parent.id!==node;case\"Property\":case\"MethodDefinition\":return parent.key!==node||parent.computed||parent.shorthand;case\"AssignmentPattern\":return parent.key!==node;default:return true;}}/**\n * Updates the current segment with the head segment.\n * This is similar to local branches and tracking branches of git.\n *\n * To separate the current and the head is in order to not make useless segments.\n *\n * In this process, both \"onCodePathSegmentStart\" and \"onCodePathSegmentEnd\"\n * events are fired.\n *\n * @param {CodePathAnalyzer} analyzer - The instance.\n * @param {ASTNode} node - The current AST node.\n * @returns {void}\n */function forwardCurrentToHead(analyzer,node){var codePath=analyzer.codePath;var state=CodePath.getState(codePath);var currentSegments=state.currentSegments;var headSegments=state.headSegments;var end=Math.max(currentSegments.length,headSegments.length);var i=void 0,currentSegment=void 0,headSegment=void 0;// Fires leaving events.\nfor(i=0;i<end;++i){currentSegment=currentSegments[i];headSegment=headSegments[i];if(currentSegment!==headSegment&&currentSegment){debug.dump(\"onCodePathSegmentEnd \"+currentSegment.id);if(currentSegment.reachable){analyzer.emitter.emit(\"onCodePathSegmentEnd\",currentSegment,node);}}}// Update state.\nstate.currentSegments=headSegments;// Fires entering events.\nfor(i=0;i<end;++i){currentSegment=currentSegments[i];headSegment=headSegments[i];if(currentSegment!==headSegment&&headSegment){debug.dump(\"onCodePathSegmentStart \"+headSegment.id);CodePathSegment.markUsed(headSegment);if(headSegment.reachable){analyzer.emitter.emit(\"onCodePathSegmentStart\",headSegment,node);}}}}/**\n * Updates the current segment with empty.\n * This is called at the last of functions or the program.\n *\n * @param {CodePathAnalyzer} analyzer - The instance.\n * @param {ASTNode} node - The current AST node.\n * @returns {void}\n */function leaveFromCurrentSegment(analyzer,node){var state=CodePath.getState(analyzer.codePath);var currentSegments=state.currentSegments;for(var i=0;i<currentSegments.length;++i){var currentSegment=currentSegments[i];debug.dump(\"onCodePathSegmentEnd \"+currentSegment.id);if(currentSegment.reachable){analyzer.emitter.emit(\"onCodePathSegmentEnd\",currentSegment,node);}}state.currentSegments=[];}/**\n * Updates the code path due to the position of a given node in the parent node\n * thereof.\n *\n * For example, if the node is `parent.consequent`, this creates a fork from the\n * current path.\n *\n * @param {CodePathAnalyzer} analyzer - The instance.\n * @param {ASTNode} node - The current AST node.\n * @returns {void}\n */function preprocess(analyzer,node){var codePath=analyzer.codePath;var state=CodePath.getState(codePath);var parent=node.parent;switch(parent.type){case\"LogicalExpression\":if(parent.right===node){state.makeLogicalRight();}break;case\"ConditionalExpression\":case\"IfStatement\":/*\n             * Fork if this node is at `consequent`/`alternate`.\n             * `popForkContext()` exists at `IfStatement:exit` and\n             * `ConditionalExpression:exit`.\n             */if(parent.consequent===node){state.makeIfConsequent();}else if(parent.alternate===node){state.makeIfAlternate();}break;case\"SwitchCase\":if(parent.consequent[0]===node){state.makeSwitchCaseBody(false,!parent.test);}break;case\"TryStatement\":if(parent.handler===node){state.makeCatchBlock();}else if(parent.finalizer===node){state.makeFinallyBlock();}break;case\"WhileStatement\":if(parent.test===node){state.makeWhileTest(getBooleanValueIfSimpleConstant(node));}else{assert(parent.body===node);state.makeWhileBody();}break;case\"DoWhileStatement\":if(parent.body===node){state.makeDoWhileBody();}else{assert(parent.test===node);state.makeDoWhileTest(getBooleanValueIfSimpleConstant(node));}break;case\"ForStatement\":if(parent.test===node){state.makeForTest(getBooleanValueIfSimpleConstant(node));}else if(parent.update===node){state.makeForUpdate();}else if(parent.body===node){state.makeForBody();}break;case\"ForInStatement\":case\"ForOfStatement\":if(parent.left===node){state.makeForInOfLeft();}else if(parent.right===node){state.makeForInOfRight();}else{assert(parent.body===node);state.makeForInOfBody();}break;case\"AssignmentPattern\":/*\n             * Fork if this node is at `right`.\n             * `left` is executed always, so it uses the current path.\n             * `popForkContext()` exists at `AssignmentPattern:exit`.\n             */if(parent.right===node){state.pushForkContext();state.forkBypassPath();state.forkPath();}break;default:break;}}/**\n * Updates the code path due to the type of a given node in entering.\n *\n * @param {CodePathAnalyzer} analyzer - The instance.\n * @param {ASTNode} node - The current AST node.\n * @returns {void}\n */function processCodePathToEnter(analyzer,node){var codePath=analyzer.codePath;var state=codePath&&CodePath.getState(codePath);var parent=node.parent;switch(node.type){case\"Program\":case\"FunctionDeclaration\":case\"FunctionExpression\":case\"ArrowFunctionExpression\":if(codePath){// Emits onCodePathSegmentStart events if updated.\nforwardCurrentToHead(analyzer,node);debug.dumpState(node,state,false);}// Create the code path of this scope.\ncodePath=analyzer.codePath=new CodePath(analyzer.idGenerator.next(),codePath,analyzer.onLooped);state=CodePath.getState(codePath);// Emits onCodePathStart events.\ndebug.dump(\"onCodePathStart \"+codePath.id);analyzer.emitter.emit(\"onCodePathStart\",codePath,node);break;case\"LogicalExpression\":state.pushChoiceContext(node.operator,isForkingByTrueOrFalse(node));break;case\"ConditionalExpression\":case\"IfStatement\":state.pushChoiceContext(\"test\",false);break;case\"SwitchStatement\":state.pushSwitchContext(node.cases.some(isCaseNode),astUtils.getLabel(node));break;case\"TryStatement\":state.pushTryContext(Boolean(node.finalizer));break;case\"SwitchCase\":/*\n             * Fork if this node is after the 2st node in `cases`.\n             * It's similar to `else` blocks.\n             * The next `test` node is processed in this path.\n             */if(parent.discriminant!==node&&parent.cases[0]!==node){state.forkPath();}break;case\"WhileStatement\":case\"DoWhileStatement\":case\"ForStatement\":case\"ForInStatement\":case\"ForOfStatement\":state.pushLoopContext(node.type,astUtils.getLabel(node));break;case\"LabeledStatement\":if(!astUtils.isBreakableStatement(node.body)){state.pushBreakContext(false,node.label.name);}break;default:break;}// Emits onCodePathSegmentStart events if updated.\nforwardCurrentToHead(analyzer,node);debug.dumpState(node,state,false);}/**\n * Updates the code path due to the type of a given node in leaving.\n *\n * @param {CodePathAnalyzer} analyzer - The instance.\n * @param {ASTNode} node - The current AST node.\n * @returns {void}\n */function processCodePathToExit(analyzer,node){var codePath=analyzer.codePath;var state=CodePath.getState(codePath);var dontForward=false;switch(node.type){case\"IfStatement\":case\"ConditionalExpression\":case\"LogicalExpression\":state.popChoiceContext();break;case\"SwitchStatement\":state.popSwitchContext();break;case\"SwitchCase\":/*\n             * This is the same as the process at the 1st `consequent` node in\n             * `preprocess` function.\n             * Must do if this `consequent` is empty.\n             */if(node.consequent.length===0){state.makeSwitchCaseBody(true,!node.test);}if(state.forkContext.reachable){dontForward=true;}break;case\"TryStatement\":state.popTryContext();break;case\"BreakStatement\":forwardCurrentToHead(analyzer,node);state.makeBreak(node.label&&node.label.name);dontForward=true;break;case\"ContinueStatement\":forwardCurrentToHead(analyzer,node);state.makeContinue(node.label&&node.label.name);dontForward=true;break;case\"ReturnStatement\":forwardCurrentToHead(analyzer,node);state.makeReturn();dontForward=true;break;case\"ThrowStatement\":forwardCurrentToHead(analyzer,node);state.makeThrow();dontForward=true;break;case\"Identifier\":if(isIdentifierReference(node)){state.makeFirstThrowablePathInTryBlock();dontForward=true;}break;case\"CallExpression\":case\"MemberExpression\":case\"NewExpression\":state.makeFirstThrowablePathInTryBlock();break;case\"WhileStatement\":case\"DoWhileStatement\":case\"ForStatement\":case\"ForInStatement\":case\"ForOfStatement\":state.popLoopContext();break;case\"AssignmentPattern\":state.popForkContext();break;case\"LabeledStatement\":if(!astUtils.isBreakableStatement(node.body)){state.popBreakContext();}break;default:break;}// Emits onCodePathSegmentStart events if updated.\nif(!dontForward){forwardCurrentToHead(analyzer,node);}debug.dumpState(node,state,true);}/**\n * Updates the code path to finalize the current code path.\n *\n * @param {CodePathAnalyzer} analyzer - The instance.\n * @param {ASTNode} node - The current AST node.\n * @returns {void}\n */function postprocess(analyzer,node){switch(node.type){case\"Program\":case\"FunctionDeclaration\":case\"FunctionExpression\":case\"ArrowFunctionExpression\":{var codePath=analyzer.codePath;// Mark the current path as the final node.\nCodePath.getState(codePath).makeFinal();// Emits onCodePathSegmentEnd event of the current segments.\nleaveFromCurrentSegment(analyzer,node);// Emits onCodePathEnd event of this code path.\ndebug.dump(\"onCodePathEnd \"+codePath.id);analyzer.emitter.emit(\"onCodePathEnd\",codePath,node);debug.dumpDot(codePath);codePath=analyzer.codePath=analyzer.codePath.upper;if(codePath){debug.dumpState(node,CodePath.getState(codePath),true);}break;}default:break;}}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * The class to analyze code paths.\n * This class implements the EventGenerator interface.\n */var CodePathAnalyzer=function(){/**\n     * @param {EventGenerator} eventGenerator - An event generator to wrap.\n     */function CodePathAnalyzer(eventGenerator){_classCallCheck(this,CodePathAnalyzer);this.original=eventGenerator;this.emitter=eventGenerator.emitter;this.codePath=null;this.idGenerator=new IdGenerator(\"s\");this.currentNode=null;this.onLooped=this.onLooped.bind(this);}/**\n     * Does the process to enter a given AST node.\n     * This updates state of analysis and calls `enterNode` of the wrapped.\n     *\n     * @param {ASTNode} node - A node which is entering.\n     * @returns {void}\n     */_createClass(CodePathAnalyzer,[{key:\"enterNode\",value:function enterNode(node){this.currentNode=node;// Updates the code path due to node's position in its parent node.\nif(node.parent){preprocess(this,node);}// Updates the code path.\n// And emits onCodePathStart/onCodePathSegmentStart events.\nprocessCodePathToEnter(this,node);// Emits node events.\nthis.original.enterNode(node);this.currentNode=null;}/**\n         * Does the process to leave a given AST node.\n         * This updates state of analysis and calls `leaveNode` of the wrapped.\n         *\n         * @param {ASTNode} node - A node which is leaving.\n         * @returns {void}\n         */},{key:\"leaveNode\",value:function leaveNode(node){this.currentNode=node;// Updates the code path.\n// And emits onCodePathStart/onCodePathSegmentStart events.\nprocessCodePathToExit(this,node);// Emits node events.\nthis.original.leaveNode(node);// Emits the last onCodePathStart/onCodePathSegmentStart events.\npostprocess(this,node);this.currentNode=null;}/**\n         * This is called on a code path looped.\n         * Then this raises a looped event.\n         *\n         * @param {CodePathSegment} fromSegment - A segment of prev.\n         * @param {CodePathSegment} toSegment - A segment of next.\n         * @returns {void}\n         */},{key:\"onLooped\",value:function onLooped(fromSegment,toSegment){if(fromSegment.reachable&&toSegment.reachable){debug.dump(\"onCodePathSegmentLoop \"+fromSegment.id+\" -> \"+toSegment.id);this.emitter.emit(\"onCodePathSegmentLoop\",fromSegment,toSegment,this.currentNode);}}}]);return CodePathAnalyzer;}();module.exports=CodePathAnalyzer;},{\"../ast-utils\":605,\"./code-path\":609,\"./code-path-segment\":607,\"./debug-helpers\":610,\"./id-generator\":612,\"assert\":11}],607:[function(require,module,exports){/**\n * @fileoverview A class of the code path segment.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var debug=require(\"./debug-helpers\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Replaces unused segments with the previous segments of each unused segment.\n *\n * @param {CodePathSegment[]} segments - An array of segments to replace.\n * @returns {CodePathSegment[]} The replaced array.\n */function flattenUnusedSegments(segments){var done=(0,_create4.default)(null);var retv=[];for(var i=0;i<segments.length;++i){var segment=segments[i];// Ignores duplicated.\nif(done[segment.id]){continue;}// Use previous segments if unused.\nif(!segment.internal.used){for(var j=0;j<segment.allPrevSegments.length;++j){var prevSegment=segment.allPrevSegments[j];if(!done[prevSegment.id]){done[prevSegment.id]=true;retv.push(prevSegment);}}}else{done[segment.id]=true;retv.push(segment);}}return retv;}/**\n * Checks whether or not a given segment is reachable.\n *\n * @param {CodePathSegment} segment - A segment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */function isReachable(segment){return segment.reachable;}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * A code path segment.\n */var CodePathSegment=function(){/**\n     * @param {string} id - An identifier.\n     * @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.\n     *   This array includes unreachable segments.\n     * @param {boolean} reachable - A flag which shows this is reachable.\n     */function CodePathSegment(id,allPrevSegments,reachable){_classCallCheck(this,CodePathSegment);/**\n         * The identifier of this code path.\n         * Rules use it to store additional information of each rule.\n         * @type {string}\n         */this.id=id;/**\n         * An array of the next segments.\n         * @type {CodePathSegment[]}\n         */this.nextSegments=[];/**\n         * An array of the previous segments.\n         * @type {CodePathSegment[]}\n         */this.prevSegments=allPrevSegments.filter(isReachable);/**\n         * An array of the next segments.\n         * This array includes unreachable segments.\n         * @type {CodePathSegment[]}\n         */this.allNextSegments=[];/**\n         * An array of the previous segments.\n         * This array includes unreachable segments.\n         * @type {CodePathSegment[]}\n         */this.allPrevSegments=allPrevSegments;/**\n         * A flag which shows this is reachable.\n         * @type {boolean}\n         */this.reachable=reachable;// Internal data.\nObject.defineProperty(this,\"internal\",{value:{used:false,loopedPrevSegments:[]}});/* istanbul ignore if */if(debug.enabled){this.internal.nodes=[];this.internal.exitNodes=[];}}/**\n     * Checks a given previous segment is coming from the end of a loop.\n     *\n     * @param {CodePathSegment} segment - A previous segment to check.\n     * @returns {boolean} `true` if the segment is coming from the end of a loop.\n     */_createClass(CodePathSegment,[{key:\"isLoopedPrevSegment\",value:function isLoopedPrevSegment(segment){return this.internal.loopedPrevSegments.indexOf(segment)!==-1;}/**\n         * Creates the root segment.\n         *\n         * @param {string} id - An identifier.\n         * @returns {CodePathSegment} The created segment.\n         */}],[{key:\"newRoot\",value:function newRoot(id){return new CodePathSegment(id,[],true);}/**\n         * Creates a segment that follows given segments.\n         *\n         * @param {string} id - An identifier.\n         * @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.\n         * @returns {CodePathSegment} The created segment.\n         */},{key:\"newNext\",value:function newNext(id,allPrevSegments){return new CodePathSegment(id,flattenUnusedSegments(allPrevSegments),allPrevSegments.some(isReachable));}/**\n         * Creates an unreachable segment that follows given segments.\n         *\n         * @param {string} id - An identifier.\n         * @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.\n         * @returns {CodePathSegment} The created segment.\n         */},{key:\"newUnreachable\",value:function newUnreachable(id,allPrevSegments){var segment=new CodePathSegment(id,flattenUnusedSegments(allPrevSegments),false);// In `if (a) return a; foo();` case, the unreachable segment preceded by\n// the return statement is not used but must not be remove.\nCodePathSegment.markUsed(segment);return segment;}/**\n         * Creates a segment that follows given segments.\n         * This factory method does not connect with `allPrevSegments`.\n         * But this inherits `reachable` flag.\n         *\n         * @param {string} id - An identifier.\n         * @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.\n         * @returns {CodePathSegment} The created segment.\n         */},{key:\"newDisconnected\",value:function newDisconnected(id,allPrevSegments){return new CodePathSegment(id,[],allPrevSegments.some(isReachable));}/**\n         * Makes a given segment being used.\n         *\n         * And this function registers the segment into the previous segments as a next.\n         *\n         * @param {CodePathSegment} segment - A segment to mark.\n         * @returns {void}\n         */},{key:\"markUsed\",value:function markUsed(segment){if(segment.internal.used){return;}segment.internal.used=true;var i=void 0;if(segment.reachable){for(i=0;i<segment.allPrevSegments.length;++i){var prevSegment=segment.allPrevSegments[i];prevSegment.allNextSegments.push(segment);prevSegment.nextSegments.push(segment);}}else{for(i=0;i<segment.allPrevSegments.length;++i){segment.allPrevSegments[i].allNextSegments.push(segment);}}}/**\n         * Marks a previous segment as looped.\n         *\n         * @param {CodePathSegment} segment - A segment.\n         * @param {CodePathSegment} prevSegment - A previous segment to mark.\n         * @returns {void}\n         */},{key:\"markPrevSegmentAsLooped\",value:function markPrevSegmentAsLooped(segment,prevSegment){segment.internal.loopedPrevSegments.push(prevSegment);}}]);return CodePathSegment;}();module.exports=CodePathSegment;},{\"./debug-helpers\":610}],608:[function(require,module,exports){/**\n * @fileoverview A class to manage state of generating a code path.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var CodePathSegment=require(\"./code-path-segment\"),ForkContext=require(\"./fork-context\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Adds given segments into the `dest` array.\n * If the `others` array does not includes the given segments, adds to the `all`\n * array as well.\n *\n * This adds only reachable and used segments.\n *\n * @param {CodePathSegment[]} dest - A destination array (`returnedSegments` or `thrownSegments`).\n * @param {CodePathSegment[]} others - Another destination array (`returnedSegments` or `thrownSegments`).\n * @param {CodePathSegment[]} all - The unified destination array (`finalSegments`).\n * @param {CodePathSegment[]} segments - Segments to add.\n * @returns {void}\n */function addToReturnedOrThrown(dest,others,all,segments){for(var i=0;i<segments.length;++i){var segment=segments[i];dest.push(segment);if(others.indexOf(segment)===-1){all.push(segment);}}}/**\n * Gets a loop-context for a `continue` statement.\n *\n * @param {CodePathState} state - A state to get.\n * @param {string} label - The label of a `continue` statement.\n * @returns {LoopContext} A loop-context for a `continue` statement.\n */function getContinueContext(state,label){if(!label){return state.loopContext;}var context=state.loopContext;while(context){if(context.label===label){return context;}context=context.upper;}/* istanbul ignore next: foolproof (syntax error) */return null;}/**\n * Gets a context for a `break` statement.\n *\n * @param {CodePathState} state - A state to get.\n * @param {string} label - The label of a `break` statement.\n * @returns {LoopContext|SwitchContext} A context for a `break` statement.\n */function getBreakContext(state,label){var context=state.breakContext;while(context){if(label?context.label===label:context.breakable){return context;}context=context.upper;}/* istanbul ignore next: foolproof (syntax error) */return null;}/**\n * Gets a context for a `return` statement.\n *\n * @param {CodePathState} state - A state to get.\n * @returns {TryContext|CodePathState} A context for a `return` statement.\n */function getReturnContext(state){var context=state.tryContext;while(context){if(context.hasFinalizer&&context.position!==\"finally\"){return context;}context=context.upper;}return state;}/**\n * Gets a context for a `throw` statement.\n *\n * @param {CodePathState} state - A state to get.\n * @returns {TryContext|CodePathState} A context for a `throw` statement.\n */function getThrowContext(state){var context=state.tryContext;while(context){if(context.position===\"try\"||context.hasFinalizer&&context.position===\"catch\"){return context;}context=context.upper;}return state;}/**\n * Removes a given element from a given array.\n *\n * @param {any[]} xs - An array to remove the specific element.\n * @param {any} x - An element to be removed.\n * @returns {void}\n */function remove(xs,x){xs.splice(xs.indexOf(x),1);}/**\n * Disconnect given segments.\n *\n * This is used in a process for switch statements.\n * If there is the \"default\" chunk before other cases, the order is different\n * between node's and running's.\n *\n * @param {CodePathSegment[]} prevSegments - Forward segments to disconnect.\n * @param {CodePathSegment[]} nextSegments - Backward segments to disconnect.\n * @returns {void}\n */function removeConnection(prevSegments,nextSegments){for(var i=0;i<prevSegments.length;++i){var prevSegment=prevSegments[i];var nextSegment=nextSegments[i];remove(prevSegment.nextSegments,nextSegment);remove(prevSegment.allNextSegments,nextSegment);remove(nextSegment.prevSegments,prevSegment);remove(nextSegment.allPrevSegments,prevSegment);}}/**\n * Creates looping path.\n *\n * @param {CodePathState} state - The instance.\n * @param {CodePathSegment[]} fromSegments - Segments which are source.\n * @param {CodePathSegment[]} toSegments - Segments which are destination.\n * @returns {void}\n */function makeLooped(state,fromSegments,toSegments){var end=Math.min(fromSegments.length,toSegments.length);for(var i=0;i<end;++i){var fromSegment=fromSegments[i];var toSegment=toSegments[i];if(toSegment.reachable){fromSegment.nextSegments.push(toSegment);}if(fromSegment.reachable){toSegment.prevSegments.push(fromSegment);}fromSegment.allNextSegments.push(toSegment);toSegment.allPrevSegments.push(fromSegment);if(toSegment.allPrevSegments.length>=2){CodePathSegment.markPrevSegmentAsLooped(toSegment,fromSegment);}state.notifyLooped(fromSegment,toSegment);}}/**\n * Finalizes segments of `test` chunk of a ForStatement.\n *\n * - Adds `false` paths to paths which are leaving from the loop.\n * - Sets `true` paths to paths which go to the body.\n *\n * @param {LoopContext} context - A loop context to modify.\n * @param {ChoiceContext} choiceContext - A choice context of this loop.\n * @param {CodePathSegment[]} head - The current head paths.\n * @returns {void}\n */function finalizeTestSegmentsOfFor(context,choiceContext,head){if(!choiceContext.processed){choiceContext.trueForkContext.add(head);choiceContext.falseForkContext.add(head);}if(context.test!==true){context.brokenForkContext.addAll(choiceContext.falseForkContext);}context.endOfTestSegments=choiceContext.trueForkContext.makeNext(0,-1);}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * A class which manages state to analyze code paths.\n */var CodePathState=function(){/**\n     * @param {IdGenerator} idGenerator - An id generator to generate id for code\n     *   path segments.\n     * @param {Function} onLooped - A callback function to notify looping.\n     */function CodePathState(idGenerator,onLooped){_classCallCheck(this,CodePathState);this.idGenerator=idGenerator;this.notifyLooped=onLooped;this.forkContext=ForkContext.newRoot(idGenerator);this.choiceContext=null;this.switchContext=null;this.tryContext=null;this.loopContext=null;this.breakContext=null;this.currentSegments=[];this.initialSegment=this.forkContext.head[0];// returnedSegments and thrownSegments push elements into finalSegments also.\nvar final=this.finalSegments=[];var returned=this.returnedForkContext=[];var thrown=this.thrownForkContext=[];returned.add=addToReturnedOrThrown.bind(null,returned,thrown,final);thrown.add=addToReturnedOrThrown.bind(null,thrown,returned,final);}/**\n     * The head segments.\n     * @type {CodePathSegment[]}\n     */_createClass(CodePathState,[{key:\"pushForkContext\",/**\n         * Creates and stacks new forking context.\n         *\n         * @param {boolean} forkLeavingPath - A flag which shows being in a\n         *   \"finally\" block.\n         * @returns {ForkContext} The created context.\n         */value:function pushForkContext(forkLeavingPath){this.forkContext=ForkContext.newEmpty(this.forkContext,forkLeavingPath);return this.forkContext;}/**\n         * Pops and merges the last forking context.\n         * @returns {ForkContext} The last context.\n         */},{key:\"popForkContext\",value:function popForkContext(){var lastContext=this.forkContext;this.forkContext=lastContext.upper;this.forkContext.replaceHead(lastContext.makeNext(0,-1));return lastContext;}/**\n         * Creates a new path.\n         * @returns {void}\n         */},{key:\"forkPath\",value:function forkPath(){this.forkContext.add(this.parentForkContext.makeNext(-1,-1));}/**\n         * Creates a bypass path.\n         * This is used for such as IfStatement which does not have \"else\" chunk.\n         *\n         * @returns {void}\n         */},{key:\"forkBypassPath\",value:function forkBypassPath(){this.forkContext.add(this.parentForkContext.head);}//--------------------------------------------------------------------------\n// ConditionalExpression, LogicalExpression, IfStatement\n//--------------------------------------------------------------------------\n/**\n         * Creates a context for ConditionalExpression, LogicalExpression,\n         * IfStatement, WhileStatement, DoWhileStatement, or ForStatement.\n         *\n         * LogicalExpressions have cases that it goes different paths between the\n         * `true` case and the `false` case.\n         *\n         * For Example:\n         *\n         *     if (a || b) {\n         *         foo();\n         *     } else {\n         *         bar();\n         *     }\n         *\n         * In this case, `b` is evaluated always in the code path of the `else`\n         * block, but it's not so in the code path of the `if` block.\n         * So there are 3 paths.\n         *\n         *     a -> foo();\n         *     a -> b -> foo();\n         *     a -> b -> bar();\n         *\n         * @param {string} kind - A kind string.\n         *   If the new context is LogicalExpression's, this is `\"&&\"` or `\"||\"`.\n         *   If it's IfStatement's or ConditionalExpression's, this is `\"test\"`.\n         *   Otherwise, this is `\"loop\"`.\n         * @param {boolean} isForkingAsResult - A flag that shows that goes different\n         *   paths between `true` and `false`.\n         * @returns {void}\n         */},{key:\"pushChoiceContext\",value:function pushChoiceContext(kind,isForkingAsResult){this.choiceContext={upper:this.choiceContext,kind:kind,isForkingAsResult:isForkingAsResult,trueForkContext:ForkContext.newEmpty(this.forkContext),falseForkContext:ForkContext.newEmpty(this.forkContext),processed:false};}/**\n         * Pops the last choice context and finalizes it.\n         *\n         * @returns {ChoiceContext} The popped context.\n         */},{key:\"popChoiceContext\",value:function popChoiceContext(){var context=this.choiceContext;this.choiceContext=context.upper;var forkContext=this.forkContext;var headSegments=forkContext.head;switch(context.kind){case\"&&\":case\"||\":/*\n                     * If any result were not transferred from child contexts,\n                     * this sets the head segments to both cases.\n                     * The head segments are the path of the right-hand operand.\n                     */if(!context.processed){context.trueForkContext.add(headSegments);context.falseForkContext.add(headSegments);}/*\n                     * Transfers results to upper context if this context is in\n                     * test chunk.\n                     */if(context.isForkingAsResult){var parentContext=this.choiceContext;parentContext.trueForkContext.addAll(context.trueForkContext);parentContext.falseForkContext.addAll(context.falseForkContext);parentContext.processed=true;return context;}break;case\"test\":if(!context.processed){/*\n                         * The head segments are the path of the `if` block here.\n                         * Updates the `true` path with the end of the `if` block.\n                         */context.trueForkContext.clear();context.trueForkContext.add(headSegments);}else{/*\n                         * The head segments are the path of the `else` block here.\n                         * Updates the `false` path with the end of the `else`\n                         * block.\n                         */context.falseForkContext.clear();context.falseForkContext.add(headSegments);}break;case\"loop\":/*\n                     * Loops are addressed in popLoopContext().\n                     * This is called from popLoopContext().\n                     */return context;/* istanbul ignore next */default:throw new Error(\"unreachable\");}// Merges all paths.\nvar prevForkContext=context.trueForkContext;prevForkContext.addAll(context.falseForkContext);forkContext.replaceHead(prevForkContext.makeNext(0,-1));return context;}/**\n         * Makes a code path segment of the right-hand operand of a logical\n         * expression.\n         *\n         * @returns {void}\n         */},{key:\"makeLogicalRight\",value:function makeLogicalRight(){var context=this.choiceContext;var forkContext=this.forkContext;if(context.processed){/*\n                 * This got segments already from the child choice context.\n                 * Creates the next path from own true/false fork context.\n                 */var prevForkContext=context.kind===\"&&\"?context.trueForkContext/* kind === \"||\" */:context.falseForkContext;forkContext.replaceHead(prevForkContext.makeNext(0,-1));prevForkContext.clear();context.processed=false;}else{/*\n                 * This did not get segments from the child choice context.\n                 * So addresses the head segments.\n                 * The head segments are the path of the left-hand operand.\n                 */if(context.kind===\"&&\"){// The path does short-circuit if false.\ncontext.falseForkContext.add(forkContext.head);}else{// The path does short-circuit if true.\ncontext.trueForkContext.add(forkContext.head);}forkContext.replaceHead(forkContext.makeNext(-1,-1));}}/**\n         * Makes a code path segment of the `if` block.\n         *\n         * @returns {void}\n         */},{key:\"makeIfConsequent\",value:function makeIfConsequent(){var context=this.choiceContext;var forkContext=this.forkContext;/*\n             * If any result were not transferred from child contexts,\n             * this sets the head segments to both cases.\n             * The head segments are the path of the test expression.\n             */if(!context.processed){context.trueForkContext.add(forkContext.head);context.falseForkContext.add(forkContext.head);}context.processed=false;// Creates new path from the `true` case.\nforkContext.replaceHead(context.trueForkContext.makeNext(0,-1));}/**\n         * Makes a code path segment of the `else` block.\n         *\n         * @returns {void}\n         */},{key:\"makeIfAlternate\",value:function makeIfAlternate(){var context=this.choiceContext;var forkContext=this.forkContext;/*\n             * The head segments are the path of the `if` block.\n             * Updates the `true` path with the end of the `if` block.\n             */context.trueForkContext.clear();context.trueForkContext.add(forkContext.head);context.processed=true;// Creates new path from the `false` case.\nforkContext.replaceHead(context.falseForkContext.makeNext(0,-1));}//--------------------------------------------------------------------------\n// SwitchStatement\n//--------------------------------------------------------------------------\n/**\n         * Creates a context object of SwitchStatement and stacks it.\n         *\n         * @param {boolean} hasCase - `true` if the switch statement has one or more\n         *   case parts.\n         * @param {string|null} label - The label text.\n         * @returns {void}\n         */},{key:\"pushSwitchContext\",value:function pushSwitchContext(hasCase,label){this.switchContext={upper:this.switchContext,hasCase:hasCase,defaultSegments:null,defaultBodySegments:null,foundDefault:false,lastIsDefault:false,countForks:0};this.pushBreakContext(true,label);}/**\n         * Pops the last context of SwitchStatement and finalizes it.\n         *\n         * - Disposes all forking stack for `case` and `default`.\n         * - Creates the next code path segment from `context.brokenForkContext`.\n         * - If the last `SwitchCase` node is not a `default` part, creates a path\n         *   to the `default` body.\n         *\n         * @returns {void}\n         */},{key:\"popSwitchContext\",value:function popSwitchContext(){var context=this.switchContext;this.switchContext=context.upper;var forkContext=this.forkContext;var brokenForkContext=this.popBreakContext().brokenForkContext;if(context.countForks===0){/*\n                 * When there is only one `default` chunk and there is one or more\n                 * `break` statements, even if forks are nothing, it needs to merge\n                 * those.\n                 */if(!brokenForkContext.empty){brokenForkContext.add(forkContext.makeNext(-1,-1));forkContext.replaceHead(brokenForkContext.makeNext(0,-1));}return;}var lastSegments=forkContext.head;this.forkBypassPath();var lastCaseSegments=forkContext.head;/*\n             * `brokenForkContext` is used to make the next segment.\n             * It must add the last segment into `brokenForkContext`.\n             */brokenForkContext.add(lastSegments);/*\n             * A path which is failed in all case test should be connected to path\n             * of `default` chunk.\n             */if(!context.lastIsDefault){if(context.defaultBodySegments){/*\n                     * Remove a link from `default` label to its chunk.\n                     * It's false route.\n                     */removeConnection(context.defaultSegments,context.defaultBodySegments);makeLooped(this,lastCaseSegments,context.defaultBodySegments);}else{/*\n                     * It handles the last case body as broken if `default` chunk\n                     * does not exist.\n                     */brokenForkContext.add(lastCaseSegments);}}// Pops the segment context stack until the entry segment.\nfor(var i=0;i<context.countForks;++i){this.forkContext=this.forkContext.upper;}/*\n             * Creates a path from all brokenForkContext paths.\n             * This is a path after switch statement.\n             */this.forkContext.replaceHead(brokenForkContext.makeNext(0,-1));}/**\n         * Makes a code path segment for a `SwitchCase` node.\n         *\n         * @param {boolean} isEmpty - `true` if the body is empty.\n         * @param {boolean} isDefault - `true` if the body is the default case.\n         * @returns {void}\n         */},{key:\"makeSwitchCaseBody\",value:function makeSwitchCaseBody(isEmpty,isDefault){var context=this.switchContext;if(!context.hasCase){return;}/*\n             * Merge forks.\n             * The parent fork context has two segments.\n             * Those are from the current case and the body of the previous case.\n             */var parentForkContext=this.forkContext;var forkContext=this.pushForkContext();forkContext.add(parentForkContext.makeNext(0,-1));/*\n             * Save `default` chunk info.\n             * If the `default` label is not at the last, we must make a path from\n             * the last `case` to the `default` chunk.\n             */if(isDefault){context.defaultSegments=parentForkContext.head;if(isEmpty){context.foundDefault=true;}else{context.defaultBodySegments=forkContext.head;}}else{if(!isEmpty&&context.foundDefault){context.foundDefault=false;context.defaultBodySegments=forkContext.head;}}context.lastIsDefault=isDefault;context.countForks+=1;}//--------------------------------------------------------------------------\n// TryStatement\n//--------------------------------------------------------------------------\n/**\n         * Creates a context object of TryStatement and stacks it.\n         *\n         * @param {boolean} hasFinalizer - `true` if the try statement has a\n         *   `finally` block.\n         * @returns {void}\n         */},{key:\"pushTryContext\",value:function pushTryContext(hasFinalizer){this.tryContext={upper:this.tryContext,position:\"try\",hasFinalizer:hasFinalizer,returnedForkContext:hasFinalizer?ForkContext.newEmpty(this.forkContext):null,thrownForkContext:ForkContext.newEmpty(this.forkContext),lastOfTryIsReachable:false,lastOfCatchIsReachable:false};}/**\n         * Pops the last context of TryStatement and finalizes it.\n         *\n         * @returns {void}\n         */},{key:\"popTryContext\",value:function popTryContext(){var context=this.tryContext;this.tryContext=context.upper;if(context.position===\"catch\"){// Merges two paths from the `try` block and `catch` block merely.\nthis.popForkContext();return;}/*\n             * The following process is executed only when there is the `finally`\n             * block.\n             */var returned=context.returnedForkContext;var thrown=context.thrownForkContext;if(returned.empty&&thrown.empty){return;}// Separate head to normal paths and leaving paths.\nvar headSegments=this.forkContext.head;this.forkContext=this.forkContext.upper;var normalSegments=headSegments.slice(0,headSegments.length/2|0);var leavingSegments=headSegments.slice(headSegments.length/2|0);// Forwards the leaving path to upper contexts.\nif(!returned.empty){getReturnContext(this).returnedForkContext.add(leavingSegments);}if(!thrown.empty){getThrowContext(this).thrownForkContext.add(leavingSegments);}// Sets the normal path as the next.\nthis.forkContext.replaceHead(normalSegments);// If both paths of the `try` block and the `catch` block are\n// unreachable, the next path becomes unreachable as well.\nif(!context.lastOfTryIsReachable&&!context.lastOfCatchIsReachable){this.forkContext.makeUnreachable();}}/**\n         * Makes a code path segment for a `catch` block.\n         *\n         * @returns {void}\n         */},{key:\"makeCatchBlock\",value:function makeCatchBlock(){var context=this.tryContext;var forkContext=this.forkContext;var thrown=context.thrownForkContext;// Update state.\ncontext.position=\"catch\";context.thrownForkContext=ForkContext.newEmpty(forkContext);context.lastOfTryIsReachable=forkContext.reachable;// Merge thrown paths.\nthrown.add(forkContext.head);var thrownSegments=thrown.makeNext(0,-1);// Fork to a bypass and the merged thrown path.\nthis.pushForkContext();this.forkBypassPath();this.forkContext.add(thrownSegments);}/**\n         * Makes a code path segment for a `finally` block.\n         *\n         * In the `finally` block, parallel paths are created. The parallel paths\n         * are used as leaving-paths. The leaving-paths are paths from `return`\n         * statements and `throw` statements in a `try` block or a `catch` block.\n         *\n         * @returns {void}\n         */},{key:\"makeFinallyBlock\",value:function makeFinallyBlock(){var context=this.tryContext;var forkContext=this.forkContext;var returned=context.returnedForkContext;var thrown=context.thrownForkContext;var headOfLeavingSegments=forkContext.head;// Update state.\nif(context.position===\"catch\"){// Merges two paths from the `try` block and `catch` block.\nthis.popForkContext();forkContext=this.forkContext;context.lastOfCatchIsReachable=forkContext.reachable;}else{context.lastOfTryIsReachable=forkContext.reachable;}context.position=\"finally\";if(returned.empty&&thrown.empty){// This path does not leave.\nreturn;}/*\n             * Create a parallel segment from merging returned and thrown.\n             * This segment will leave at the end of this finally block.\n             */var segments=forkContext.makeNext(-1,-1);var j=void 0;for(var i=0;i<forkContext.count;++i){var prevSegsOfLeavingSegment=[headOfLeavingSegments[i]];for(j=0;j<returned.segmentsList.length;++j){prevSegsOfLeavingSegment.push(returned.segmentsList[j][i]);}for(j=0;j<thrown.segmentsList.length;++j){prevSegsOfLeavingSegment.push(thrown.segmentsList[j][i]);}segments.push(CodePathSegment.newNext(this.idGenerator.next(),prevSegsOfLeavingSegment));}this.pushForkContext(true);this.forkContext.add(segments);}/**\n         * Makes a code path segment from the first throwable node to the `catch`\n         * block or the `finally` block.\n         *\n         * @returns {void}\n         */},{key:\"makeFirstThrowablePathInTryBlock\",value:function makeFirstThrowablePathInTryBlock(){var forkContext=this.forkContext;if(!forkContext.reachable){return;}var context=getThrowContext(this);if(context===this||context.position!==\"try\"||!context.thrownForkContext.empty){return;}context.thrownForkContext.add(forkContext.head);forkContext.replaceHead(forkContext.makeNext(-1,-1));}//--------------------------------------------------------------------------\n// Loop Statements\n//--------------------------------------------------------------------------\n/**\n         * Creates a context object of a loop statement and stacks it.\n         *\n         * @param {string} type - The type of the node which was triggered. One of\n         *   `WhileStatement`, `DoWhileStatement`, `ForStatement`, `ForInStatement`,\n         *   and `ForStatement`.\n         * @param {string|null} label - A label of the node which was triggered.\n         * @returns {void}\n         */},{key:\"pushLoopContext\",value:function pushLoopContext(type,label){var forkContext=this.forkContext;var breakContext=this.pushBreakContext(true,label);switch(type){case\"WhileStatement\":this.pushChoiceContext(\"loop\",false);this.loopContext={upper:this.loopContext,type:type,label:label,test:void 0,continueDestSegments:null,brokenForkContext:breakContext.brokenForkContext};break;case\"DoWhileStatement\":this.pushChoiceContext(\"loop\",false);this.loopContext={upper:this.loopContext,type:type,label:label,test:void 0,entrySegments:null,continueForkContext:ForkContext.newEmpty(forkContext),brokenForkContext:breakContext.brokenForkContext};break;case\"ForStatement\":this.pushChoiceContext(\"loop\",false);this.loopContext={upper:this.loopContext,type:type,label:label,test:void 0,endOfInitSegments:null,testSegments:null,endOfTestSegments:null,updateSegments:null,endOfUpdateSegments:null,continueDestSegments:null,brokenForkContext:breakContext.brokenForkContext};break;case\"ForInStatement\":case\"ForOfStatement\":this.loopContext={upper:this.loopContext,type:type,label:label,prevSegments:null,leftSegments:null,endOfLeftSegments:null,continueDestSegments:null,brokenForkContext:breakContext.brokenForkContext};break;/* istanbul ignore next */default:throw new Error(\"unknown type: \\\"\"+type+\"\\\"\");}}/**\n         * Pops the last context of a loop statement and finalizes it.\n         *\n         * @returns {void}\n         */},{key:\"popLoopContext\",value:function popLoopContext(){var context=this.loopContext;this.loopContext=context.upper;var forkContext=this.forkContext;var brokenForkContext=this.popBreakContext().brokenForkContext;var choiceContext=void 0;// Creates a looped path.\nswitch(context.type){case\"WhileStatement\":case\"ForStatement\":choiceContext=this.popChoiceContext();makeLooped(this,forkContext.head,context.continueDestSegments);break;case\"DoWhileStatement\":{choiceContext=this.popChoiceContext();if(!choiceContext.processed){choiceContext.trueForkContext.add(forkContext.head);choiceContext.falseForkContext.add(forkContext.head);}if(context.test!==true){brokenForkContext.addAll(choiceContext.falseForkContext);}// `true` paths go to looping.\nvar segmentsList=choiceContext.trueForkContext.segmentsList;for(var i=0;i<segmentsList.length;++i){makeLooped(this,segmentsList[i],context.entrySegments);}break;}case\"ForInStatement\":case\"ForOfStatement\":brokenForkContext.add(forkContext.head);makeLooped(this,forkContext.head,context.leftSegments);break;/* istanbul ignore next */default:throw new Error(\"unreachable\");}// Go next.\nif(brokenForkContext.empty){forkContext.replaceHead(forkContext.makeUnreachable(-1,-1));}else{forkContext.replaceHead(brokenForkContext.makeNext(0,-1));}}/**\n         * Makes a code path segment for the test part of a WhileStatement.\n         *\n         * @param {boolean|undefined} test - The test value (only when constant).\n         * @returns {void}\n         */},{key:\"makeWhileTest\",value:function makeWhileTest(test){var context=this.loopContext;var forkContext=this.forkContext;var testSegments=forkContext.makeNext(0,-1);// Update state.\ncontext.test=test;context.continueDestSegments=testSegments;forkContext.replaceHead(testSegments);}/**\n         * Makes a code path segment for the body part of a WhileStatement.\n         *\n         * @returns {void}\n         */},{key:\"makeWhileBody\",value:function makeWhileBody(){var context=this.loopContext;var choiceContext=this.choiceContext;var forkContext=this.forkContext;if(!choiceContext.processed){choiceContext.trueForkContext.add(forkContext.head);choiceContext.falseForkContext.add(forkContext.head);}// Update state.\nif(context.test!==true){context.brokenForkContext.addAll(choiceContext.falseForkContext);}forkContext.replaceHead(choiceContext.trueForkContext.makeNext(0,-1));}/**\n         * Makes a code path segment for the body part of a DoWhileStatement.\n         *\n         * @returns {void}\n         */},{key:\"makeDoWhileBody\",value:function makeDoWhileBody(){var context=this.loopContext;var forkContext=this.forkContext;var bodySegments=forkContext.makeNext(-1,-1);// Update state.\ncontext.entrySegments=bodySegments;forkContext.replaceHead(bodySegments);}/**\n         * Makes a code path segment for the test part of a DoWhileStatement.\n         *\n         * @param {boolean|undefined} test - The test value (only when constant).\n         * @returns {void}\n         */},{key:\"makeDoWhileTest\",value:function makeDoWhileTest(test){var context=this.loopContext;var forkContext=this.forkContext;context.test=test;// Creates paths of `continue` statements.\nif(!context.continueForkContext.empty){context.continueForkContext.add(forkContext.head);var testSegments=context.continueForkContext.makeNext(0,-1);forkContext.replaceHead(testSegments);}}/**\n         * Makes a code path segment for the test part of a ForStatement.\n         *\n         * @param {boolean|undefined} test - The test value (only when constant).\n         * @returns {void}\n         */},{key:\"makeForTest\",value:function makeForTest(test){var context=this.loopContext;var forkContext=this.forkContext;var endOfInitSegments=forkContext.head;var testSegments=forkContext.makeNext(-1,-1);// Update state.\ncontext.test=test;context.endOfInitSegments=endOfInitSegments;context.continueDestSegments=context.testSegments=testSegments;forkContext.replaceHead(testSegments);}/**\n         * Makes a code path segment for the update part of a ForStatement.\n         *\n         * @returns {void}\n         */},{key:\"makeForUpdate\",value:function makeForUpdate(){var context=this.loopContext;var choiceContext=this.choiceContext;var forkContext=this.forkContext;// Make the next paths of the test.\nif(context.testSegments){finalizeTestSegmentsOfFor(context,choiceContext,forkContext.head);}else{context.endOfInitSegments=forkContext.head;}// Update state.\nvar updateSegments=forkContext.makeDisconnected(-1,-1);context.continueDestSegments=context.updateSegments=updateSegments;forkContext.replaceHead(updateSegments);}/**\n         * Makes a code path segment for the body part of a ForStatement.\n         *\n         * @returns {void}\n         */},{key:\"makeForBody\",value:function makeForBody(){var context=this.loopContext;var choiceContext=this.choiceContext;var forkContext=this.forkContext;// Update state.\nif(context.updateSegments){context.endOfUpdateSegments=forkContext.head;// `update` -> `test`\nif(context.testSegments){makeLooped(this,context.endOfUpdateSegments,context.testSegments);}}else if(context.testSegments){finalizeTestSegmentsOfFor(context,choiceContext,forkContext.head);}else{context.endOfInitSegments=forkContext.head;}var bodySegments=context.endOfTestSegments;if(!bodySegments){/*\n                 * If there is not the `test` part, the `body` path comes from the\n                 * `init` part and the `update` part.\n                 */var prevForkContext=ForkContext.newEmpty(forkContext);prevForkContext.add(context.endOfInitSegments);if(context.endOfUpdateSegments){prevForkContext.add(context.endOfUpdateSegments);}bodySegments=prevForkContext.makeNext(0,-1);}context.continueDestSegments=context.continueDestSegments||bodySegments;forkContext.replaceHead(bodySegments);}/**\n         * Makes a code path segment for the left part of a ForInStatement and a\n         * ForOfStatement.\n         *\n         * @returns {void}\n         */},{key:\"makeForInOfLeft\",value:function makeForInOfLeft(){var context=this.loopContext;var forkContext=this.forkContext;var leftSegments=forkContext.makeDisconnected(-1,-1);// Update state.\ncontext.prevSegments=forkContext.head;context.leftSegments=context.continueDestSegments=leftSegments;forkContext.replaceHead(leftSegments);}/**\n         * Makes a code path segment for the right part of a ForInStatement and a\n         * ForOfStatement.\n         *\n         * @returns {void}\n         */},{key:\"makeForInOfRight\",value:function makeForInOfRight(){var context=this.loopContext;var forkContext=this.forkContext;var temp=ForkContext.newEmpty(forkContext);temp.add(context.prevSegments);var rightSegments=temp.makeNext(-1,-1);// Update state.\ncontext.endOfLeftSegments=forkContext.head;forkContext.replaceHead(rightSegments);}/**\n         * Makes a code path segment for the body part of a ForInStatement and a\n         * ForOfStatement.\n         *\n         * @returns {void}\n         */},{key:\"makeForInOfBody\",value:function makeForInOfBody(){var context=this.loopContext;var forkContext=this.forkContext;var temp=ForkContext.newEmpty(forkContext);temp.add(context.endOfLeftSegments);var bodySegments=temp.makeNext(-1,-1);// Make a path: `right` -> `left`.\nmakeLooped(this,forkContext.head,context.leftSegments);// Update state.\ncontext.brokenForkContext.add(forkContext.head);forkContext.replaceHead(bodySegments);}//--------------------------------------------------------------------------\n// Control Statements\n//--------------------------------------------------------------------------\n/**\n         * Creates new context for BreakStatement.\n         *\n         * @param {boolean} breakable - The flag to indicate it can break by\n         *      an unlabeled BreakStatement.\n         * @param {string|null} label - The label of this context.\n         * @returns {Object} The new context.\n         */},{key:\"pushBreakContext\",value:function pushBreakContext(breakable,label){this.breakContext={upper:this.breakContext,breakable:breakable,label:label,brokenForkContext:ForkContext.newEmpty(this.forkContext)};return this.breakContext;}/**\n         * Removes the top item of the break context stack.\n         *\n         * @returns {Object} The removed context.\n         */},{key:\"popBreakContext\",value:function popBreakContext(){var context=this.breakContext;var forkContext=this.forkContext;this.breakContext=context.upper;// Process this context here for other than switches and loops.\nif(!context.breakable){var brokenForkContext=context.brokenForkContext;if(!brokenForkContext.empty){brokenForkContext.add(forkContext.head);forkContext.replaceHead(brokenForkContext.makeNext(0,-1));}}return context;}/**\n         * Makes a path for a `break` statement.\n         *\n         * It registers the head segment to a context of `break`.\n         * It makes new unreachable segment, then it set the head with the segment.\n         *\n         * @param {string} label - A label of the break statement.\n         * @returns {void}\n         */},{key:\"makeBreak\",value:function makeBreak(label){var forkContext=this.forkContext;if(!forkContext.reachable){return;}var context=getBreakContext(this,label);/* istanbul ignore else: foolproof (syntax error) */if(context){context.brokenForkContext.add(forkContext.head);}forkContext.replaceHead(forkContext.makeUnreachable(-1,-1));}/**\n         * Makes a path for a `continue` statement.\n         *\n         * It makes a looping path.\n         * It makes new unreachable segment, then it set the head with the segment.\n         *\n         * @param {string} label - A label of the continue statement.\n         * @returns {void}\n         */},{key:\"makeContinue\",value:function makeContinue(label){var forkContext=this.forkContext;if(!forkContext.reachable){return;}var context=getContinueContext(this,label);/* istanbul ignore else: foolproof (syntax error) */if(context){if(context.continueDestSegments){makeLooped(this,forkContext.head,context.continueDestSegments);// If the context is a for-in/of loop, this effects a break also.\nif(context.type===\"ForInStatement\"||context.type===\"ForOfStatement\"){context.brokenForkContext.add(forkContext.head);}}else{context.continueForkContext.add(forkContext.head);}}forkContext.replaceHead(forkContext.makeUnreachable(-1,-1));}/**\n         * Makes a path for a `return` statement.\n         *\n         * It registers the head segment to a context of `return`.\n         * It makes new unreachable segment, then it set the head with the segment.\n         *\n         * @returns {void}\n         */},{key:\"makeReturn\",value:function makeReturn(){var forkContext=this.forkContext;if(forkContext.reachable){getReturnContext(this).returnedForkContext.add(forkContext.head);forkContext.replaceHead(forkContext.makeUnreachable(-1,-1));}}/**\n         * Makes a path for a `throw` statement.\n         *\n         * It registers the head segment to a context of `throw`.\n         * It makes new unreachable segment, then it set the head with the segment.\n         *\n         * @returns {void}\n         */},{key:\"makeThrow\",value:function makeThrow(){var forkContext=this.forkContext;if(forkContext.reachable){getThrowContext(this).thrownForkContext.add(forkContext.head);forkContext.replaceHead(forkContext.makeUnreachable(-1,-1));}}/**\n         * Makes the final path.\n         * @returns {void}\n         */},{key:\"makeFinal\",value:function makeFinal(){var segments=this.currentSegments;if(segments.length>0&&segments[0].reachable){this.returnedForkContext.add(segments);}}},{key:\"headSegments\",get:function get(){return this.forkContext.head;}/**\n         * The parent forking context.\n         * This is used for the root of new forks.\n         * @type {ForkContext}\n         */},{key:\"parentForkContext\",get:function get(){var current=this.forkContext;return current&&current.upper;}}]);return CodePathState;}();module.exports=CodePathState;},{\"./code-path-segment\":607,\"./fork-context\":611}],609:[function(require,module,exports){/**\n * @fileoverview A class of the code path.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var CodePathState=require(\"./code-path-state\");var IdGenerator=require(\"./id-generator\");//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * A code path.\n */var CodePath=function(){/**\n     * @param {string} id - An identifier.\n     * @param {CodePath|null} upper - The code path of the upper function scope.\n     * @param {Function} onLooped - A callback function to notify looping.\n     */function CodePath(id,upper,onLooped){_classCallCheck(this,CodePath);/**\n         * The identifier of this code path.\n         * Rules use it to store additional information of each rule.\n         * @type {string}\n         */this.id=id;/**\n         * The code path of the upper function scope.\n         * @type {CodePath|null}\n         */this.upper=upper;/**\n         * The code paths of nested function scopes.\n         * @type {CodePath[]}\n         */this.childCodePaths=[];// Initializes internal state.\nObject.defineProperty(this,\"internal\",{value:new CodePathState(new IdGenerator(id+\"_\"),onLooped)});// Adds this into `childCodePaths` of `upper`.\nif(upper){upper.childCodePaths.push(this);}}/**\n     * Gets the state of a given code path.\n     *\n     * @param {CodePath} codePath - A code path to get.\n     * @returns {CodePathState} The state of the code path.\n     */_createClass(CodePath,[{key:\"traverseSegments\",/**\n         * Traverses all segments in this code path.\n         *\n         *     codePath.traverseSegments(function(segment, controller) {\n         *         // do something.\n         *     });\n         *\n         * This method enumerates segments in order from the head.\n         *\n         * The `controller` object has two methods.\n         *\n         * - `controller.skip()` - Skip the following segments in this branch.\n         * - `controller.break()` - Skip all following segments.\n         *\n         * @param {Object} [options] - Omittable.\n         * @param {CodePathSegment} [options.first] - The first segment to traverse.\n         * @param {CodePathSegment} [options.last] - The last segment to traverse.\n         * @param {Function} callback - A callback function.\n         * @returns {void}\n         */value:function traverseSegments(options,callback){if(typeof options===\"function\"){callback=options;options=null;}options=options||{};var startSegment=options.first||this.internal.initialSegment;var lastSegment=options.last;var item=null;var index=0;var end=0;var segment=null;var visited=(0,_create4.default)(null);var stack=[[startSegment,0]];var skippedSegment=null;var broken=false;var controller={skip:function skip(){if(stack.length<=1){broken=true;}else{skippedSegment=stack[stack.length-2][0];}},break:function _break(){broken=true;}};/**\n             * Checks a given previous segment has been visited.\n             * @param {CodePathSegment} prevSegment - A previous segment to check.\n             * @returns {boolean} `true` if the segment has been visited.\n             */function isVisited(prevSegment){return visited[prevSegment.id]||segment.isLoopedPrevSegment(prevSegment);}while(stack.length>0){item=stack[stack.length-1];segment=item[0];index=item[1];if(index===0){// Skip if this segment has been visited already.\nif(visited[segment.id]){stack.pop();continue;}// Skip if all previous segments have not been visited.\nif(segment!==startSegment&&segment.prevSegments.length>0&&!segment.prevSegments.every(isVisited)){stack.pop();continue;}// Reset the flag of skipping if all branches have been skipped.\nif(skippedSegment&&segment.prevSegments.indexOf(skippedSegment)!==-1){skippedSegment=null;}visited[segment.id]=true;// Call the callback when the first time.\nif(!skippedSegment){callback.call(this,segment,controller);// eslint-disable-line callback-return\nif(segment===lastSegment){controller.skip();}if(broken){break;}}}// Update the stack.\nend=segment.nextSegments.length-1;if(index<end){item[1]+=1;stack.push([segment.nextSegments[index],0]);}else if(index===end){item[0]=segment.nextSegments[index];item[1]=0;}else{stack.pop();}}}},{key:\"initialSegment\",/**\n         * The initial code path segment.\n         * @type {CodePathSegment}\n         */get:function get(){return this.internal.initialSegment;}/**\n         * Final code path segments.\n         * This array is a mix of `returnedSegments` and `thrownSegments`.\n         * @type {CodePathSegment[]}\n         */},{key:\"finalSegments\",get:function get(){return this.internal.finalSegments;}/**\n         * Final code path segments which is with `return` statements.\n         * This array contains the last path segment if it's reachable.\n         * Since the reachable last path returns `undefined`.\n         * @type {CodePathSegment[]}\n         */},{key:\"returnedSegments\",get:function get(){return this.internal.returnedForkContext;}/**\n         * Final code path segments which is with `throw` statements.\n         * @type {CodePathSegment[]}\n         */},{key:\"thrownSegments\",get:function get(){return this.internal.thrownForkContext;}/**\n         * Current code path segments.\n         * @type {CodePathSegment[]}\n         */},{key:\"currentSegments\",get:function get(){return this.internal.currentSegments;}}],[{key:\"getState\",value:function getState(codePath){return codePath.internal;}}]);return CodePath;}();module.exports=CodePath;},{\"./code-path-state\":608,\"./id-generator\":612}],610:[function(require,module,exports){/**\n * @fileoverview Helpers to debug for code path analysis.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar debug=require(\"debug\")(\"eslint:code-path\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Gets id of a given segment.\n * @param {CodePathSegment} segment - A segment to get.\n * @returns {string} Id of the segment.\n *//* istanbul ignore next */function getId(segment){// eslint-disable-line require-jsdoc\nreturn segment.id+(segment.reachable?\"\":\"!\");}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\nmodule.exports={/**\n     * A flag that debug dumping is enabled or not.\n     * @type {boolean}\n     */enabled:debug.enabled,/**\n     * Dumps given objects.\n     *\n     * @param {...any} args - objects to dump.\n     * @returns {void}\n     */dump:debug,/**\n     * Dumps the current analyzing state.\n     *\n     * @param {ASTNode} node - A node to dump.\n     * @param {CodePathState} state - A state to dump.\n     * @param {boolean} leaving - A flag whether or not it's leaving\n     * @returns {void}\n     */dumpState:!debug.enabled?debug:/* istanbul ignore next */function(node,state,leaving){for(var i=0;i<state.currentSegments.length;++i){var segInternal=state.currentSegments[i].internal;if(leaving){segInternal.exitNodes.push(node);}else{segInternal.nodes.push(node);}}debug([state.currentSegments.map(getId).join(\",\")+\")\",\"\"+node.type+(leaving?\":exit\":\"\")].join(\" \"));},/**\n     * Dumps a DOT code of a given code path.\n     * The DOT code can be visialized with Graphvis.\n     *\n     * @param {CodePath} codePath - A code path to dump.\n     * @returns {void}\n     * @see http://www.graphviz.org\n     * @see http://www.webgraphviz.com\n     */dumpDot:!debug.enabled?debug:/* istanbul ignore next */function(codePath){var text=\"\\n\"+\"digraph {\\n\"+\"node[shape=box,style=\\\"rounded,filled\\\",fillcolor=white];\\n\"+\"initial[label=\\\"\\\",shape=circle,style=filled,fillcolor=black,width=0.25,height=0.25];\\n\";if(codePath.returnedSegments.length>0){text+=\"final[label=\\\"\\\",shape=doublecircle,style=filled,fillcolor=black,width=0.25,height=0.25];\\n\";}if(codePath.thrownSegments.length>0){text+=\"thrown[label=\\\"✘\\\",shape=circle,width=0.3,height=0.3,fixedsize];\\n\";}var traceMap=(0,_create4.default)(null);var arrows=this.makeDotArrows(codePath,traceMap);for(var id in traceMap){// eslint-disable-line guard-for-in\nvar segment=traceMap[id];text+=id+\"[\";if(segment.reachable){text+=\"label=\\\"\";}else{text+=\"style=\\\"rounded,dashed,filled\\\",fillcolor=\\\"#FF9800\\\",label=\\\"<<unreachable>>\\\\n\";}if(segment.internal.nodes.length>0||segment.internal.exitNodes.length>0){text+=[].concat(segment.internal.nodes.map(function(node){switch(node.type){case\"Identifier\":return node.type+\" (\"+node.name+\")\";case\"Literal\":return node.type+\" (\"+node.value+\")\";default:return node.type;}}),segment.internal.exitNodes.map(function(node){switch(node.type){case\"Identifier\":return node.type+\":exit (\"+node.name+\")\";case\"Literal\":return node.type+\":exit (\"+node.value+\")\";default:return node.type+\":exit\";}})).join(\"\\\\n\");}else{text+=\"????\";}text+=\"\\\"];\\n\";}text+=arrows+\"\\n\";text+=\"}\";debug(\"DOT\",text);},/**\n     * Makes a DOT code of a given code path.\n     * The DOT code can be visialized with Graphvis.\n     *\n     * @param {CodePath} codePath - A code path to make DOT.\n     * @param {Object} traceMap - Optional. A map to check whether or not segments had been done.\n     * @returns {string} A DOT code of the code path.\n     */makeDotArrows:function makeDotArrows(codePath,traceMap){var stack=[[codePath.initialSegment,0]];var done=traceMap||(0,_create4.default)(null);var lastId=codePath.initialSegment.id;var text=\"initial->\"+codePath.initialSegment.id;while(stack.length>0){var item=stack.pop();var segment=item[0];var index=item[1];if(done[segment.id]&&index===0){continue;}done[segment.id]=segment;var nextSegment=segment.allNextSegments[index];if(!nextSegment){continue;}if(lastId===segment.id){text+=\"->\"+nextSegment.id;}else{text+=\";\\n\"+segment.id+\"->\"+nextSegment.id;}lastId=nextSegment.id;stack.unshift([segment,1+index]);stack.push([nextSegment,0]);}codePath.returnedSegments.forEach(function(finalSegment){if(lastId===finalSegment.id){text+=\"->final\";}else{text+=\";\\n\"+finalSegment.id+\"->final\";}lastId=null;});codePath.thrownSegments.forEach(function(finalSegment){if(lastId===finalSegment.id){text+=\"->thrown\";}else{text+=\";\\n\"+finalSegment.id+\"->thrown\";}lastId=null;});return text+\";\";}};},{\"debug\":179}],611:[function(require,module,exports){/**\n * @fileoverview A class to operate forking.\n *\n * This is state of forking.\n * This has a fork list and manages it.\n *\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var assert=require(\"assert\"),CodePathSegment=require(\"./code-path-segment\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Gets whether or not a given segment is reachable.\n *\n * @param {CodePathSegment} segment - A segment to get.\n * @returns {boolean} `true` if the segment is reachable.\n */function isReachable(segment){return segment.reachable;}/**\n * Creates new segments from the specific range of `context.segmentsList`.\n *\n * When `context.segmentsList` is `[[a, b], [c, d], [e, f]]`, `begin` is `0`, and\n * `end` is `-1`, this creates `[g, h]`. This `g` is from `a`, `c`, and `e`.\n * This `h` is from `b`, `d`, and `f`.\n *\n * @param {ForkContext} context - An instance.\n * @param {number} begin - The first index of the previous segments.\n * @param {number} end - The last index of the previous segments.\n * @param {Function} create - A factory function of new segments.\n * @returns {CodePathSegment[]} New segments.\n */function makeSegments(context,begin,end,create){var list=context.segmentsList;if(begin<0){begin=list.length+begin;}if(end<0){end=list.length+end;}var segments=[];for(var i=0;i<context.count;++i){var allPrevSegments=[];for(var j=begin;j<=end;++j){allPrevSegments.push(list[j][i]);}segments.push(create(context.idGenerator.next(),allPrevSegments));}return segments;}/**\n * `segments` becomes doubly in a `finally` block. Then if a code path exits by a\n * control statement (such as `break`, `continue`) from the `finally` block, the\n * destination's segments may be half of the source segments. In that case, this\n * merges segments.\n *\n * @param {ForkContext} context - An instance.\n * @param {CodePathSegment[]} segments - Segments to merge.\n * @returns {CodePathSegment[]} The merged segments.\n */function mergeExtraSegments(context,segments){while(segments.length>context.count){var merged=[];for(var i=0,length=segments.length/2|0;i<length;++i){merged.push(CodePathSegment.newNext(context.idGenerator.next(),[segments[i],segments[i+length]]));}segments=merged;}return segments;}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * A class to manage forking.\n */var ForkContext=function(){/**\n     * @param {IdGenerator} idGenerator - An identifier generator for segments.\n     * @param {ForkContext|null} upper - An upper fork context.\n     * @param {number} count - A number of parallel segments.\n     */function ForkContext(idGenerator,upper,count){_classCallCheck(this,ForkContext);this.idGenerator=idGenerator;this.upper=upper;this.count=count;this.segmentsList=[];}/**\n     * The head segments.\n     * @type {CodePathSegment[]}\n     */_createClass(ForkContext,[{key:\"makeNext\",/**\n         * Creates new segments from this context.\n         *\n         * @param {number} begin - The first index of previous segments.\n         * @param {number} end - The last index of previous segments.\n         * @returns {CodePathSegment[]} New segments.\n         */value:function makeNext(begin,end){return makeSegments(this,begin,end,CodePathSegment.newNext);}/**\n         * Creates new segments from this context.\n         * The new segments is always unreachable.\n         *\n         * @param {number} begin - The first index of previous segments.\n         * @param {number} end - The last index of previous segments.\n         * @returns {CodePathSegment[]} New segments.\n         */},{key:\"makeUnreachable\",value:function makeUnreachable(begin,end){return makeSegments(this,begin,end,CodePathSegment.newUnreachable);}/**\n         * Creates new segments from this context.\n         * The new segments don't have connections for previous segments.\n         * But these inherit the reachable flag from this context.\n         *\n         * @param {number} begin - The first index of previous segments.\n         * @param {number} end - The last index of previous segments.\n         * @returns {CodePathSegment[]} New segments.\n         */},{key:\"makeDisconnected\",value:function makeDisconnected(begin,end){return makeSegments(this,begin,end,CodePathSegment.newDisconnected);}/**\n         * Adds segments into this context.\n         * The added segments become the head.\n         *\n         * @param {CodePathSegment[]} segments - Segments to add.\n         * @returns {void}\n         */},{key:\"add\",value:function add(segments){assert(segments.length>=this.count,segments.length+\" >= \"+this.count);this.segmentsList.push(mergeExtraSegments(this,segments));}/**\n         * Replaces the head segments with given segments.\n         * The current head segments are removed.\n         *\n         * @param {CodePathSegment[]} segments - Segments to add.\n         * @returns {void}\n         */},{key:\"replaceHead\",value:function replaceHead(segments){assert(segments.length>=this.count,segments.length+\" >= \"+this.count);this.segmentsList.splice(-1,1,mergeExtraSegments(this,segments));}/**\n         * Adds all segments of a given fork context into this context.\n         *\n         * @param {ForkContext} context - A fork context to add.\n         * @returns {void}\n         */},{key:\"addAll\",value:function addAll(context){assert(context.count===this.count);var source=context.segmentsList;for(var i=0;i<source.length;++i){this.segmentsList.push(source[i]);}}/**\n         * Clears all secments in this context.\n         *\n         * @returns {void}\n         */},{key:\"clear\",value:function clear(){this.segmentsList=[];}/**\n         * Creates the root fork context.\n         *\n         * @param {IdGenerator} idGenerator - An identifier generator for segments.\n         * @returns {ForkContext} New fork context.\n         */},{key:\"head\",get:function get(){var list=this.segmentsList;return list.length===0?[]:list[list.length-1];}/**\n         * A flag which shows empty.\n         * @type {boolean}\n         */},{key:\"empty\",get:function get(){return this.segmentsList.length===0;}/**\n         * A flag which shows reachable.\n         * @type {boolean}\n         */},{key:\"reachable\",get:function get(){var segments=this.head;return segments.length>0&&segments.some(isReachable);}}],[{key:\"newRoot\",value:function newRoot(idGenerator){var context=new ForkContext(idGenerator,null,1);context.add([CodePathSegment.newRoot(idGenerator.next())]);return context;}/**\n         * Creates an empty fork context preceded by a given context.\n         *\n         * @param {ForkContext} parentContext - The parent fork context.\n         * @param {boolean} forkLeavingPath - A flag which shows inside of `finally` block.\n         * @returns {ForkContext} New fork context.\n         */},{key:\"newEmpty\",value:function newEmpty(parentContext,forkLeavingPath){return new ForkContext(parentContext.idGenerator,parentContext,(forkLeavingPath?2:1)*parentContext.count);}}]);return ForkContext;}();module.exports=ForkContext;},{\"./code-path-segment\":607,\"assert\":11}],612:[function(require,module,exports){/**\n * @fileoverview A class of identifiers generator for code path segments.\n *\n * Each rule uses the identifier of code path segments to store additional\n * information of the code path.\n *\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * A generator for unique ids.\n */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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var IdGenerator=function(){/**\n   * @param {string} prefix - Optional. A prefix of generated ids.\n   */function IdGenerator(prefix){_classCallCheck(this,IdGenerator);this.prefix=String(prefix);this.n=0;}/**\n   * Generates id.\n   *\n   * @returns {string} A generated id.\n   */_createClass(IdGenerator,[{key:\"next\",value:function next(){this.n=1+this.n|0;/* istanbul ignore if */if(this.n<0){this.n=1;}return this.prefix+this.n;}}]);return IdGenerator;}();module.exports=IdGenerator;},{}],613:[function(require,module,exports){/**\n * @fileoverview Config file operations. This file must be usable in the browser,\n * so no Node-specific code can be here.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var Environments=require(\"./environments\");var debug=require(\"debug\")(\"eslint:config-ops\");//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\nvar RULE_SEVERITY_STRINGS=[\"off\",\"warn\",\"error\"],RULE_SEVERITY=RULE_SEVERITY_STRINGS.reduce(function(map,value,index){map[value]=index;return map;},{}),VALID_SEVERITIES=[0,1,2,\"off\",\"warn\",\"error\"];//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\nmodule.exports={/**\n     * Creates an empty configuration object suitable for merging as a base.\n     * @returns {Object} A configuration object.\n     */createEmptyConfig:function createEmptyConfig(){return{globals:{},env:{},rules:{},parserOptions:{}};},/**\n     * Creates an environment config based on the specified environments.\n     * @param {Object<string,boolean>} env The environment settings.\n     * @returns {Object} A configuration object with the appropriate rules and globals\n     *      set.\n     */createEnvironmentConfig:function createEnvironmentConfig(env){var envConfig=this.createEmptyConfig();if(env){envConfig.env=env;(0,_keys4.default)(env).filter(function(name){return env[name];}).forEach(function(name){var environment=Environments.get(name);if(environment){debug(\"Creating config for environment \"+name);if(environment.globals){(0,_assign4.default)(envConfig.globals,environment.globals);}if(environment.parserOptions){(0,_assign4.default)(envConfig.parserOptions,environment.parserOptions);}}});}return envConfig;},/**\n     * Given a config with environment settings, applies the globals and\n     * ecmaFeatures to the configuration and returns the result.\n     * @param {Object} config The configuration information.\n     * @returns {Object} The updated configuration information.\n     */applyEnvironments:function applyEnvironments(config){if(config.env&&_typeof(config.env)===\"object\"){debug(\"Apply environment settings to config\");return this.merge(this.createEnvironmentConfig(config.env),config);}return config;},/**\n     * Merges two config objects. This will not only add missing keys, but will also modify values to match.\n     * @param {Object} target config object\n     * @param {Object} src config object. Overrides in this config object will take priority over base.\n     * @param {boolean} [combine] Whether to combine arrays or not\n     * @param {boolean} [isRule] Whether its a rule\n     * @returns {Object} merged config object.\n     */merge:function deepmerge(target,src,combine,isRule){/*\n         The MIT License (MIT)\n          Copyright (c) 2012 Nicholas Fisher\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          The above copyright notice and this permission notice shall be included in\n         all copies or substantial portions of the Software.\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         * This code is taken from deepmerge repo\n         * (https://github.com/KyleAMathews/deepmerge)\n         * and modified to meet our needs.\n         */var array=Array.isArray(src)||Array.isArray(target);var dst=array&&[]||{};combine=!!combine;isRule=!!isRule;if(array){target=target||[];// src could be a string, so check for array\nif(isRule&&Array.isArray(src)&&src.length>1){dst=dst.concat(src);}else{dst=dst.concat(target);}if((typeof src===\"undefined\"?\"undefined\":_typeof(src))!==\"object\"&&!Array.isArray(src)){src=[src];}(0,_keys4.default)(src).forEach(function(e,i){e=src[i];if(typeof dst[i]===\"undefined\"){dst[i]=e;}else if((typeof e===\"undefined\"?\"undefined\":_typeof(e))===\"object\"){if(isRule){dst[i]=e;}else{dst[i]=deepmerge(target[i],e,combine,isRule);}}else{if(!combine){dst[i]=e;}else{if(dst.indexOf(e)===-1){dst.push(e);}}}});}else{if(target&&(typeof target===\"undefined\"?\"undefined\":_typeof(target))===\"object\"){(0,_keys4.default)(target).forEach(function(key){dst[key]=target[key];});}(0,_keys4.default)(src).forEach(function(key){if(Array.isArray(src[key])||Array.isArray(target[key])){dst[key]=deepmerge(target[key],src[key],key===\"plugins\",isRule);}else if(_typeof(src[key])!==\"object\"||!src[key]||key===\"exported\"||key===\"astGlobals\"){dst[key]=src[key];}else{dst[key]=deepmerge(target[key]||{},src[key],combine,key===\"rules\");}});}return dst;},/**\n     * Converts new-style severity settings (off, warn, error) into old-style\n     * severity settings (0, 1, 2) for all rules. Assumption is that severity\n     * values have already been validated as correct.\n     * @param {Object} config The config object to normalize.\n     * @returns {void}\n     */normalize:function normalize(config){if(config.rules){(0,_keys4.default)(config.rules).forEach(function(ruleId){var ruleConfig=config.rules[ruleId];if(typeof ruleConfig===\"string\"){config.rules[ruleId]=RULE_SEVERITY[ruleConfig.toLowerCase()]||0;}else if(Array.isArray(ruleConfig)&&typeof ruleConfig[0]===\"string\"){ruleConfig[0]=RULE_SEVERITY[ruleConfig[0].toLowerCase()]||0;}});}},/**\n     * Converts old-style severity settings (0, 1, 2) into new-style\n     * severity settings (off, warn, error) for all rules. Assumption is that severity\n     * values have already been validated as correct.\n     * @param {Object} config The config object to normalize.\n     * @returns {void}\n     */normalizeToStrings:function normalizeToStrings(config){if(config.rules){(0,_keys4.default)(config.rules).forEach(function(ruleId){var ruleConfig=config.rules[ruleId];if(typeof ruleConfig===\"number\"){config.rules[ruleId]=RULE_SEVERITY_STRINGS[ruleConfig]||RULE_SEVERITY_STRINGS[0];}else if(Array.isArray(ruleConfig)&&typeof ruleConfig[0]===\"number\"){ruleConfig[0]=RULE_SEVERITY_STRINGS[ruleConfig[0]]||RULE_SEVERITY_STRINGS[0];}});}},/**\n     * Determines if the severity for the given rule configuration represents an error.\n     * @param {int|string|Array} ruleConfig The configuration for an individual rule.\n     * @returns {boolean} True if the rule represents an error, false if not.\n     */isErrorSeverity:function isErrorSeverity(ruleConfig){var severity=Array.isArray(ruleConfig)?ruleConfig[0]:ruleConfig;if(typeof severity===\"string\"){severity=RULE_SEVERITY[severity.toLowerCase()]||0;}return typeof severity===\"number\"&&severity===2;},/**\n     * Checks whether a given config has valid severity or not.\n     * @param {number|string|Array} ruleConfig - The configuration for an individual rule.\n     * @returns {boolean} `true` if the configuration has valid severity.\n     */isValidSeverity:function isValidSeverity(ruleConfig){var severity=Array.isArray(ruleConfig)?ruleConfig[0]:ruleConfig;if(typeof severity===\"string\"){severity=severity.toLowerCase();}return VALID_SEVERITIES.indexOf(severity)!==-1;},/**\n     * Checks whether every rule of a given config has valid severity or not.\n     * @param {Object} config - The configuration for rules.\n     * @returns {boolean} `true` if the configuration has valid severity.\n     */isEverySeverityValid:function isEverySeverityValid(config){var _this=this;return(0,_keys4.default)(config).every(function(ruleId){return _this.isValidSeverity(config[ruleId]);});}};},{\"./environments\":615,\"debug\":179}],614:[function(require,module,exports){/**\n * @fileoverview Validates configs.\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var rules=require(\"../rules\"),Environments=require(\"./environments\"),schemaValidator=require(\"is-my-json-valid\"),util=require(\"util\");var validators={rules:(0,_create4.default)(null)};//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n/**\n * Gets a complete options schema for a rule.\n * @param {string} id The rule's unique name.\n * @returns {Object} JSON Schema for the rule's options.\n */function getRuleOptionsSchema(id){var rule=rules.get(id),schema=rule&&rule.schema||rule&&rule.meta&&rule.meta.schema;// Given a tuple of schemas, insert warning level at the beginning\nif(Array.isArray(schema)){if(schema.length){return{type:\"array\",items:schema,minItems:0,maxItems:schema.length};}return{type:\"array\",minItems:0,maxItems:0};}// Given a full schema, leave it alone\nreturn schema||null;}/**\n* Validates a rule's severity and returns the severity value. Throws an error if the severity is invalid.\n* @param {options} options The given options for the rule.\n* @returns {number|string} The rule's severity value\n*/function validateRuleSeverity(options){var severity=Array.isArray(options)?options[0]:options;if(severity!==0&&severity!==1&&severity!==2&&!(typeof severity===\"string\"&&/^(?:off|warn|error)$/i.test(severity))){throw new Error(\"\\tSeverity should be one of the following: 0 = off, 1 = warn, 2 = error (you passed '\"+util.inspect(severity).replace(/'/g,\"\\\"\").replace(/\\n/g,\"\")+\"').\\n\");}return severity;}/**\n* Validates the non-severity options passed to a rule, based on its schema.\n* @param {string} id The rule's unique name\n* @param {array} localOptions The options for the rule, excluding severity\n* @returns {void}\n*/function validateRuleSchema(id,localOptions){var schema=getRuleOptionsSchema(id);if(!validators.rules[id]&&schema){validators.rules[id]=schemaValidator(schema,{verbose:true});}var validateRule=validators.rules[id];if(validateRule){validateRule(localOptions);if(validateRule.errors){throw new Error(validateRule.errors.map(function(error){return\"\\tValue \\\"\"+error.value+\"\\\" \"+error.message+\".\\n\";}).join(\"\"));}}}/**\n * Validates a rule's options against its schema.\n * @param {string} id The rule's unique name.\n * @param {array|number} options The given options for the rule.\n * @param {string} source The name of the configuration source.\n * @returns {void}\n */function validateRuleOptions(id,options,source){try{var severity=validateRuleSeverity(options);if(severity!==0&&!(typeof severity===\"string\"&&severity.toLowerCase()===\"off\")){validateRuleSchema(id,Array.isArray(options)?options.slice(1):[]);}}catch(err){throw new Error(source+\":\\n\\tConfiguration for rule \\\"\"+id+\"\\\" is invalid:\\n\"+err.message);}}/**\n * Validates an environment object\n * @param {Object} environment The environment config object to validate.\n * @param {string} source The location to report with any errors.\n * @returns {void}\n */function validateEnvironment(environment,source){// not having an environment is ok\nif(!environment){return;}if(Array.isArray(environment)){throw new Error(\"Environment must not be an array\");}if((typeof environment===\"undefined\"?\"undefined\":_typeof(environment))===\"object\"){(0,_keys4.default)(environment).forEach(function(env){if(!Environments.get(env)){var message=[source,\":\\n\",\"\\tEnvironment key \\\"\",env,\"\\\" is unknown\\n\"];throw new Error(message.join(\"\"));}});}else{throw new Error(\"Environment must be an object\");}}/**\n * Validates an entire config object.\n * @param {Object} config The config object to validate.\n * @param {string} source The location to report with any errors.\n * @returns {void}\n */function validate(config,source){if(_typeof(config.rules)===\"object\"){(0,_keys4.default)(config.rules).forEach(function(id){validateRuleOptions(id,config.rules[id],source);});}validateEnvironment(config.env,source);}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\nmodule.exports={getRuleOptionsSchema:getRuleOptionsSchema,validate:validate,validateRuleOptions:validateRuleOptions};},{\"../rules\":619,\"./environments\":615,\"is-my-json-valid\":382,\"util\":602}],615:[function(require,module,exports){/**\n * @fileoverview Environments manager\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar envs=require(\"../../conf/environments\");//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\nvar environments=new _map4.default();/**\n * Loads the default environments.\n * @returns {void}\n * @private\n */function load(){(0,_keys4.default)(envs).forEach(function(envName){environments.set(envName,envs[envName]);});}// always load default environments upfront\nload();//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\nmodule.exports={load:load,/**\n     * Gets the environment with the given name.\n     * @param {string} name The name of the environment to retrieve.\n     * @returns {Object?} The environment object or null if not found.\n     */get:function get(name){return environments.get(name)||null;},/**\n     * Defines an environment.\n     * @param {string} name The name of the environment.\n     * @param {Object} env The environment settings.\n     * @returns {void}\n     */define:function define(name,env){environments.set(name,env);},/**\n     * Imports all environments from a plugin.\n     * @param {Object} plugin The plugin object.\n     * @param {string} pluginName The name of the plugin.\n     * @returns {void}\n     */importPlugin:function importPlugin(plugin,pluginName){var _this=this;if(plugin.environments){(0,_keys4.default)(plugin.environments).forEach(function(envName){_this.define(pluginName+\"/\"+envName,plugin.environments[envName]);});}},/**\n     * Resets all environments. Only use for tests!\n     * @returns {void}\n     */testReset:function testReset(){environments=new _map4.default();load();}};},{\"../../conf/environments\":2}],616:[function(require,module,exports){/**\n * @fileoverview Main ESLint object.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var assert=require(\"assert\"),EventEmitter=require(\"events\").EventEmitter,escope=require(\"escope\"),levn=require(\"levn\"),blankScriptAST=require(\"../conf/blank-script.json\"),DEFAULT_PARSER=require(\"../conf/eslint-recommended\").parser,replacements=require(\"../conf/replacements.json\"),CodePathAnalyzer=require(\"./code-path-analysis/code-path-analyzer\"),ConfigOps=require(\"./config/config-ops\"),validator=require(\"./config/config-validator\"),Environments=require(\"./config/environments\"),CommentEventGenerator=require(\"./util/comment-event-generator\"),NodeEventGenerator=require(\"./util/node-event-generator\"),SourceCode=require(\"./util/source-code\"),Traverser=require(\"./util/traverser\"),RuleContext=require(\"./rule-context\"),rules=require(\"./rules\"),timing=require(\"./timing\"),pkg=require(\"../package.json\");//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n/**\n * The result of a parsing operation from parseForESLint()\n * @typedef {Object} CustomParseResult\n * @property {ASTNode} ast The ESTree AST Program node.\n * @property {Object} services An object containing additional services related\n *      to the parser.\n *///------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Parses a list of \"name:boolean_value\" or/and \"name\" options divided by comma or\n * whitespace.\n * @param {string} string The string to parse.\n * @param {Comment} comment The comment node which has the string.\n * @returns {Object} Result map object of names and boolean values\n */function parseBooleanConfig(string,comment){var items={};// Collapse whitespace around `:` and `,` to make parsing easier\nstring=string.replace(/\\s*([:,])\\s*/g,\"$1\");string.split(/\\s|,+/).forEach(function(name){if(!name){return;}var pos=name.indexOf(\":\");var value=void 0;if(pos!==-1){value=name.substring(pos+1,name.length);name=name.substring(0,pos);}items[name]={value:value===\"true\",comment:comment};});return items;}/**\n * Parses a JSON-like config.\n * @param {string} string The string to parse.\n * @param {Object} location Start line and column of comments for potential error message.\n * @param {Object[]} messages The messages queue for potential error message.\n * @returns {Object} Result map object\n */function parseJsonConfig(string,location,messages){var items={};// Parses a JSON-like comment by the same way as parsing CLI option.\ntry{items=levn.parse(\"Object\",string)||{};// Some tests say that it should ignore invalid comments such as `/*eslint no-alert:abc*/`.\n// Also, commaless notations have invalid severity:\n//     \"no-alert: 2 no-console: 2\" --> {\"no-alert\": \"2 no-console: 2\"}\n// Should ignore that case as well.\nif(ConfigOps.isEverySeverityValid(items)){return items;}}catch(ex){}// ignore to parse the string by a fallback.\n// Optionator cannot parse commaless notations.\n// But we are supporting that. So this is a fallback for that.\nitems={};string=string.replace(/([a-zA-Z0-9\\-/]+):/g,\"\\\"$1\\\":\").replace(/(]|[0-9])\\s+(?=\")/,\"$1,\");try{items=JSON.parse(\"{\"+string+\"}\");}catch(ex){messages.push({ruleId:null,fatal:true,severity:2,source:null,message:\"Failed to parse JSON from '\"+string+\"': \"+ex.message,line:location.start.line,column:location.start.column+1});}return items;}/**\n * Parses a config of values separated by comma.\n * @param {string} string The string to parse.\n * @returns {Object} Result map of values and true values\n */function parseListConfig(string){var items={};// Collapse whitespace around ,\nstring=string.replace(/\\s*,\\s*/g,\",\");string.split(/,+/).forEach(function(name){name=name.trim();if(!name){return;}items[name]=true;});return items;}/**\n * Ensures that variables representing built-in properties of the Global Object,\n * and any globals declared by special block comments, are present in the global\n * scope.\n * @param {ASTNode} program The top node of the AST.\n * @param {Scope} globalScope The global scope.\n * @param {Object} config The existing configuration data.\n * @returns {void}\n */function addDeclaredGlobals(program,globalScope,config){var declaredGlobals={},exportedGlobals={},explicitGlobals={},builtin=Environments.get(\"builtin\");(0,_assign4.default)(declaredGlobals,builtin);(0,_keys4.default)(config.env).forEach(function(name){if(config.env[name]){var env=Environments.get(name),environmentGlobals=env&&env.globals;if(environmentGlobals){(0,_assign4.default)(declaredGlobals,environmentGlobals);}}});(0,_assign4.default)(exportedGlobals,config.exported);(0,_assign4.default)(declaredGlobals,config.globals);(0,_assign4.default)(explicitGlobals,config.astGlobals);(0,_keys4.default)(declaredGlobals).forEach(function(name){var variable=globalScope.set.get(name);if(!variable){variable=new escope.Variable(name,globalScope);variable.eslintExplicitGlobal=false;globalScope.variables.push(variable);globalScope.set.set(name,variable);}variable.writeable=declaredGlobals[name];});(0,_keys4.default)(explicitGlobals).forEach(function(name){var variable=globalScope.set.get(name);if(!variable){variable=new escope.Variable(name,globalScope);variable.eslintExplicitGlobal=true;variable.eslintExplicitGlobalComment=explicitGlobals[name].comment;globalScope.variables.push(variable);globalScope.set.set(name,variable);}variable.writeable=explicitGlobals[name].value;});// mark all exported variables as such\n(0,_keys4.default)(exportedGlobals).forEach(function(name){var variable=globalScope.set.get(name);if(variable){variable.eslintUsed=true;}});/*\n     * \"through\" contains all references which definitions cannot be found.\n     * Since we augment the global scope using configuration, we need to update\n     * references and remove the ones that were added by configuration.\n     */globalScope.through=globalScope.through.filter(function(reference){var name=reference.identifier.name;var variable=globalScope.set.get(name);if(variable){/*\n             * Links the variable and the reference.\n             * And this reference is removed from `Scope#through`.\n             */reference.resolved=variable;variable.references.push(reference);return false;}return true;});}/**\n * Add data to reporting configuration to disable reporting for list of rules\n * starting from start location\n * @param  {Object[]} reportingConfig Current reporting configuration\n * @param  {Object} start Position to start\n * @param  {string[]} rulesToDisable List of rules\n * @returns {void}\n */function disableReporting(reportingConfig,start,rulesToDisable){if(rulesToDisable.length){rulesToDisable.forEach(function(rule){reportingConfig.push({start:start,end:null,rule:rule});});}else{reportingConfig.push({start:start,end:null,rule:null});}}/**\n * Add data to reporting configuration to enable reporting for list of rules\n * starting from start location\n * @param  {Object[]} reportingConfig Current reporting configuration\n * @param  {Object} start Position to start\n * @param  {string[]} rulesToEnable List of rules\n * @returns {void}\n */function enableReporting(reportingConfig,start,rulesToEnable){var i=void 0;if(rulesToEnable.length){rulesToEnable.forEach(function(rule){for(i=reportingConfig.length-1;i>=0;i--){if(!reportingConfig[i].end&&reportingConfig[i].rule===rule){reportingConfig[i].end=start;break;}}});}else{// find all previous disabled locations if they was started as list of rules\nvar prevStart=void 0;for(i=reportingConfig.length-1;i>=0;i--){if(prevStart&&prevStart!==reportingConfig[i].start){break;}if(!reportingConfig[i].end){reportingConfig[i].end=start;prevStart=reportingConfig[i].start;}}}}/**\n * Parses comments in file to extract file-specific config of rules, globals\n * and environments and merges them with global config; also code blocks\n * where reporting is disabled or enabled and merges them with reporting config.\n * @param {string} filename The file being checked.\n * @param {ASTNode} ast The top node of the AST.\n * @param {Object} config The existing configuration data.\n * @param {Object[]} reportingConfig The existing reporting configuration data.\n * @param {Object[]} messages The messages queue.\n * @returns {Object} Modified config object\n */function modifyConfigsFromComments(filename,ast,config,reportingConfig,messages){var commentConfig={exported:{},astGlobals:{},rules:{},env:{}};var commentRules={};ast.comments.forEach(function(comment){var value=comment.value.trim();var match=/^(eslint(-\\w+){0,3}|exported|globals?)(\\s|$)/.exec(value);if(match){value=value.substring(match.index+match[1].length);if(comment.type===\"Block\"){switch(match[1]){case\"exported\":(0,_assign4.default)(commentConfig.exported,parseBooleanConfig(value,comment));break;case\"globals\":case\"global\":(0,_assign4.default)(commentConfig.astGlobals,parseBooleanConfig(value,comment));break;case\"eslint-env\":(0,_assign4.default)(commentConfig.env,parseListConfig(value));break;case\"eslint-disable\":disableReporting(reportingConfig,comment.loc.start,(0,_keys4.default)(parseListConfig(value)));break;case\"eslint-enable\":enableReporting(reportingConfig,comment.loc.start,(0,_keys4.default)(parseListConfig(value)));break;case\"eslint\":{var items=parseJsonConfig(value,comment.loc,messages);(0,_keys4.default)(items).forEach(function(name){var ruleValue=items[name];validator.validateRuleOptions(name,ruleValue,filename+\" line \"+comment.loc.start.line);commentRules[name]=ruleValue;});break;}// no default\n}}else{// comment.type === \"Line\"\nif(match[1]===\"eslint-disable-line\"){disableReporting(reportingConfig,{line:comment.loc.start.line,column:0},(0,_keys4.default)(parseListConfig(value)));enableReporting(reportingConfig,comment.loc.end,(0,_keys4.default)(parseListConfig(value)));}else if(match[1]===\"eslint-disable-next-line\"){disableReporting(reportingConfig,comment.loc.start,(0,_keys4.default)(parseListConfig(value)));enableReporting(reportingConfig,{line:comment.loc.start.line+2},(0,_keys4.default)(parseListConfig(value)));}}}});// apply environment configs\n(0,_keys4.default)(commentConfig.env).forEach(function(name){var env=Environments.get(name);if(env){commentConfig=ConfigOps.merge(commentConfig,env);}});(0,_assign4.default)(commentConfig.rules,commentRules);return ConfigOps.merge(config,commentConfig);}/**\n * Check if message of rule with ruleId should be ignored in location\n * @param  {Object[]} reportingConfig  Collection of ignore records\n * @param  {string} ruleId   Id of rule\n * @param  {Object} location Location of message\n * @returns {boolean}          True if message should be ignored, false otherwise\n */function isDisabledByReportingConfig(reportingConfig,ruleId,location){for(var i=0,c=reportingConfig.length;i<c;i++){var ignore=reportingConfig[i];if((!ignore.rule||ignore.rule===ruleId)&&(location.line>ignore.start.line||location.line===ignore.start.line&&location.column>=ignore.start.column)&&(!ignore.end||location.line<ignore.end.line||location.line===ignore.end.line&&location.column<=ignore.end.column)){return true;}}return false;}/**\n * Normalize ECMAScript version from the initial config\n * @param  {number} ecmaVersion ECMAScript version from the initial config\n * @param  {boolean} isModule Whether the source type is module or not\n * @returns {number} normalized ECMAScript version\n */function normalizeEcmaVersion(ecmaVersion,isModule){// Need at least ES6 for modules\nif(isModule&&(!ecmaVersion||ecmaVersion<6)){ecmaVersion=6;}// Calculate ECMAScript edition number from official year version starting with\n// ES2015, which corresponds with ES6 (or a difference of 2009).\nif(ecmaVersion>=2015){ecmaVersion-=2009;}return ecmaVersion;}/**\n * Process initial config to make it safe to extend by file comment config\n * @param  {Object} config Initial config\n * @returns {Object}        Processed config\n */function prepareConfig(config){config.globals=config.globals||config.global||{};delete config.global;var copiedRules={};var parserOptions={};if(_typeof(config.rules)===\"object\"){(0,_keys4.default)(config.rules).forEach(function(k){var rule=config.rules[k];if(rule===null){throw new Error(\"Invalid config for rule '\"+k+\"'.\");}if(Array.isArray(rule)){copiedRules[k]=rule.slice();}else{copiedRules[k]=rule;}});}// merge in environment parserOptions\nif(_typeof(config.env)===\"object\"){(0,_keys4.default)(config.env).forEach(function(envName){var env=Environments.get(envName);if(config.env[envName]&&env&&env.parserOptions){parserOptions=ConfigOps.merge(parserOptions,env.parserOptions);}});}var preparedConfig={rules:copiedRules,parser:config.parser||DEFAULT_PARSER,globals:ConfigOps.merge({},config.globals),env:ConfigOps.merge({},config.env||{}),settings:ConfigOps.merge({},config.settings||{}),parserOptions:ConfigOps.merge(parserOptions,config.parserOptions||{})};var isModule=preparedConfig.parserOptions.sourceType===\"module\";if(isModule){if(!preparedConfig.parserOptions.ecmaFeatures){preparedConfig.parserOptions.ecmaFeatures={};}// can't have global return inside of modules\npreparedConfig.parserOptions.ecmaFeatures.globalReturn=false;}preparedConfig.parserOptions.ecmaVersion=normalizeEcmaVersion(preparedConfig.parserOptions.ecmaVersion,isModule);return preparedConfig;}/**\n * Provide a stub rule with a given message\n * @param  {string} message The message to be displayed for the rule\n * @returns {Function}      Stub rule function\n */function createStubRule(message){/**\n     * Creates a fake rule object\n     * @param {Object} context context object for each rule\n     * @returns {Object} collection of node to listen on\n     */function createRuleModule(context){return{Program:function Program(node){context.report(node,message);}};}if(message){return createRuleModule;}throw new Error(\"No message passed to stub rule\");}/**\n * Provide a rule replacement message\n * @param  {string} ruleId Name of the rule\n * @returns {string}       Message detailing rule replacement\n */function getRuleReplacementMessage(ruleId){if(ruleId in replacements.rules){var newRules=replacements.rules[ruleId];return\"Rule '\"+ruleId+\"' was removed and replaced by: \"+newRules.join(\", \");}return null;}var eslintEnvPattern=/\\/\\*\\s*eslint-env\\s(.+?)\\*\\//g;/**\n * Checks whether or not there is a comment which has \"eslint-env *\" in a given text.\n * @param {string} text - A source code text to check.\n * @returns {Object|null} A result of parseListConfig() with \"eslint-env *\" comment.\n */function findEslintEnv(text){var match=void 0,retv=void 0;eslintEnvPattern.lastIndex=0;while(match=eslintEnvPattern.exec(text)){retv=(0,_assign4.default)(retv||{},parseListConfig(match[1]));}return retv;}/**\n * Strips Unicode BOM from a given text.\n *\n * @param {string} text - A text to strip.\n * @returns {string} The stripped text.\n */function stripUnicodeBOM(text){/*\n     * Check Unicode BOM.\n     * In JavaScript, string data is stored as UTF-16, so BOM is 0xFEFF.\n     * http://www.ecma-international.org/ecma-262/6.0/#sec-unicode-format-control-characters\n     */if(text.charCodeAt(0)===0xFEFF){return text.slice(1);}return text;}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * Object that is responsible for verifying JavaScript text\n * @name eslint\n */module.exports=function(){var api=(0,_create4.default)(new EventEmitter());var messages=[],currentConfig=null,currentScopes=null,scopeManager=null,currentFilename=null,traverser=null,reportingConfig=[],sourceCode=null;/**\n     * Parses text into an AST. Moved out here because the try-catch prevents\n     * optimization of functions, so it's best to keep the try-catch as isolated\n     * as possible\n     * @param {string} text The text to parse.\n     * @param {Object} config The ESLint configuration object.\n     * @param {string} filePath The path to the file being parsed.\n     * @returns {ASTNode|CustomParseResult} The AST or parse result if successful,\n     *      or null if not.\n     * @private\n     */function parse(text,config,filePath){var parser=void 0,parserOptions={loc:true,range:true,raw:true,tokens:true,comment:true,attachComment:true,filePath:filePath};try{switch(config.parser){case'babel-eslint':parser=require(\"babel-eslint\");break;default:parser=require(config.parser);}}catch(ex){messages.push({ruleId:null,fatal:true,severity:2,source:null,message:ex.message,line:0,column:0});return null;}// merge in any additional parser options\nif(config.parserOptions){parserOptions=(0,_assign4.default)({},config.parserOptions,parserOptions);}/*\n         * Check for parsing errors first. If there's a parsing error, nothing\n         * else can happen. However, a parsing error does not throw an error\n         * from this method - it's just considered a fatal error message, a\n         * problem that ESLint identified just like any other.\n         */try{if(typeof parser.parseForESLint===\"function\"){return parser.parseForESLint(text,parserOptions);}return parser.parse(text,parserOptions);}catch(ex){// If the message includes a leading line number, strip it:\nvar message=ex.message.replace(/^line \\d+:/i,\"\").trim();var source=ex.lineNumber?SourceCode.splitLines(text)[ex.lineNumber-1]:null;messages.push({ruleId:null,fatal:true,severity:2,source:source,message:\"Parsing error: \"+message,line:ex.lineNumber,column:ex.column});return null;}}/**\n     * Get the severity level of a rule (0 - none, 1 - warning, 2 - error)\n     * Returns 0 if the rule config is not valid (an Array or a number)\n     * @param {Array|number} ruleConfig rule configuration\n     * @returns {number} 0, 1, or 2, indicating rule severity\n     */function getRuleSeverity(ruleConfig){if(typeof ruleConfig===\"number\"){return ruleConfig;}else if(Array.isArray(ruleConfig)){return ruleConfig[0];}return 0;}/**\n     * Get the options for a rule (not including severity), if any\n     * @param {Array|number} ruleConfig rule configuration\n     * @returns {Array} of rule options, empty Array if none\n     */function getRuleOptions(ruleConfig){if(Array.isArray(ruleConfig)){return ruleConfig.slice(1);}return[];}// set unlimited listeners (see https://github.com/eslint/eslint/issues/524)\napi.setMaxListeners(0);/**\n     * Resets the internal state of the object.\n     * @returns {void}\n     */api.reset=function(){this.removeAllListeners();messages=[];currentConfig=null;currentScopes=null;scopeManager=null;traverser=null;reportingConfig=[];sourceCode=null;};/**\n     * Configuration object for the `verify` API. A JS representation of the eslintrc files.\n     * @typedef {Object} ESLintConfig\n     * @property {Object} rules The rule configuration to verify against.\n     * @property {string} [parser] Parser to use when generatig the AST.\n     * @property {Object} [parserOptions] Options for the parsed used.\n     * @property {Object} [settings] Global settings passed to each rule.\n     * @property {Object} [env] The environment to verify in.\n     * @property {Object} [globals] Available globalsto the code.\n     *//**\n     * Verifies the text against the rules specified by the second argument.\n     * @param {string|SourceCode} textOrSourceCode The text to parse or a SourceCode object.\n     * @param {ESLintConfig} config An ESLintConfig instance to configure everything.\n     * @param {(string|Object)} [filenameOrOptions] The optional filename of the file being checked.\n     *      If this is not set, the filename will default to '<input>' in the rule context. If\n     *      an object, then it has \"filename\", \"saveState\", and \"allowInlineConfig\" properties.\n     * @param {boolean} [saveState] Indicates if the state from the last run should be saved.\n     *      Mostly useful for testing purposes.\n     * @param {boolean} [filenameOrOptions.allowInlineConfig] Allow/disallow inline comments' ability to change config once it is set. Defaults to true if not supplied.\n     *      Useful if you want to validate JS without comments overriding rules.\n     * @returns {Object[]} The results as an array of messages or null if no messages.\n     */api.verify=function(textOrSourceCode,config,filenameOrOptions,saveState){var text=typeof textOrSourceCode===\"string\"?textOrSourceCode:null;var ast=void 0,parseResult=void 0,shebang=void 0,allowInlineConfig=void 0;// evaluate arguments\nif((typeof filenameOrOptions===\"undefined\"?\"undefined\":_typeof(filenameOrOptions))===\"object\"){currentFilename=filenameOrOptions.filename;allowInlineConfig=filenameOrOptions.allowInlineConfig;saveState=filenameOrOptions.saveState;}else{currentFilename=filenameOrOptions;}if(!saveState){this.reset();}// search and apply \"eslint-env *\".\nvar envInFile=findEslintEnv(text||textOrSourceCode.text);config=(0,_assign4.default)({},config);if(envInFile){if(config.env){config.env=(0,_assign4.default)({},config.env,envInFile);}else{config.env=envInFile;}}// process initial config to make it safe to extend\nconfig=prepareConfig(config);// only do this for text\nif(text!==null){// there's no input, just exit here\nif(text.trim().length===0){sourceCode=new SourceCode(text,blankScriptAST);return messages;}parseResult=parse(stripUnicodeBOM(text).replace(/^#!([^\\r\\n]+)/,function(match,captured){shebang=captured;return\"//\"+captured;}),config,currentFilename);// if this result is from a parseForESLint() method, normalize\nif(parseResult&&parseResult.ast){ast=parseResult.ast;}else{ast=parseResult;parseResult=null;}if(ast){sourceCode=new SourceCode(text,ast);}}else{sourceCode=textOrSourceCode;ast=sourceCode.ast;}// if espree failed to parse the file, there's no sense in setting up rules\nif(ast){// parse global comments and modify config\nif(allowInlineConfig!==false){config=modifyConfigsFromComments(currentFilename,ast,config,reportingConfig,messages);}// ensure that severities are normalized in the config\nConfigOps.normalize(config);// enable appropriate rules\n(0,_keys4.default)(config.rules).filter(function(key){return getRuleSeverity(config.rules[key])>0;}).forEach(function(key){var ruleCreator=void 0;ruleCreator=rules.get(key);if(!ruleCreator){var replacementMsg=getRuleReplacementMessage(key);if(replacementMsg){ruleCreator=createStubRule(replacementMsg);}else{ruleCreator=createStubRule(\"Definition for rule '\"+key+\"' was not found\");}rules.define(key,ruleCreator);}var severity=getRuleSeverity(config.rules[key]);var options=getRuleOptions(config.rules[key]);try{var ruleContext=new RuleContext(key,api,severity,options,config.settings,config.parserOptions,config.parser,ruleCreator.meta,parseResult&&parseResult.services?parseResult.services:{});var rule=ruleCreator.create?ruleCreator.create(ruleContext):ruleCreator(ruleContext);// add all the selectors from the rule as listeners\n(0,_keys4.default)(rule).forEach(function(selector){api.on(selector,timing.enabled?timing.time(key,rule[selector]):rule[selector]);});}catch(ex){ex.message=\"Error while loading rule '\"+key+\"': \"+ex.message;throw ex;}});// save config so rules can access as necessary\ncurrentConfig=config;traverser=new Traverser();var ecmaFeatures=currentConfig.parserOptions.ecmaFeatures||{};var ecmaVersion=currentConfig.parserOptions.ecmaVersion||5;// gather scope data that may be needed by the rules\nscopeManager=escope.analyze(ast,{ignoreEval:true,nodejsScope:ecmaFeatures.globalReturn,impliedStrict:ecmaFeatures.impliedStrict,ecmaVersion:ecmaVersion,sourceType:currentConfig.parserOptions.sourceType||\"script\",fallback:Traverser.getKeys});currentScopes=scopeManager.scopes;// augment global scope with declared global variables\naddDeclaredGlobals(ast,currentScopes[0],currentConfig);// remove shebang comments\nif(shebang&&ast.comments.length&&ast.comments[0].value===shebang){ast.comments.splice(0,1);if(ast.body.length&&ast.body[0].leadingComments&&ast.body[0].leadingComments[0].value===shebang){ast.body[0].leadingComments.splice(0,1);}}var eventGenerator=new NodeEventGenerator(api);eventGenerator=new CodePathAnalyzer(eventGenerator);eventGenerator=new CommentEventGenerator(eventGenerator,sourceCode);/*\n             * Each node has a type property. Whenever a particular type of\n             * node is found, an event is fired. This allows any listeners to\n             * automatically be informed that this type of node has been found\n             * and react accordingly.\n             */traverser.traverse(ast,{enter:function enter(node,parent){node.parent=parent;eventGenerator.enterNode(node);},leave:function leave(node){eventGenerator.leaveNode(node);}});}// sort by line and column\nmessages.sort(function(a,b){var lineDiff=a.line-b.line;if(lineDiff===0){return a.column-b.column;}return lineDiff;});return messages;};/**\n     * Reports a message from one of the rules.\n     * @param {string} ruleId The ID of the rule causing the message.\n     * @param {number} severity The severity level of the rule as configured.\n     * @param {ASTNode} node The AST node that the message relates to.\n     * @param {Object=} location An object containing the error line and column\n     *      numbers. If location is not provided the node's start location will\n     *      be used.\n     * @param {string} message The actual message.\n     * @param {Object} opts Optional template data which produces a formatted message\n     *     with symbols being replaced by this object's values.\n     * @param {Object} fix A fix command description.\n     * @param {Object} meta Metadata of the rule\n     * @returns {void}\n     */api.report=function(ruleId,severity,node,location,message,opts,fix,meta){if(node){assert.strictEqual(typeof node===\"undefined\"?\"undefined\":_typeof(node),\"object\",\"Node must be an object\");}if(typeof location===\"string\"){assert.ok(node,\"Node must be provided when reporting error if location is not provided\");meta=fix;fix=opts;opts=message;message=location;location=node.loc.start;}// Store end location.\nvar endLocation=location.end;location=location.start||location;if(isDisabledByReportingConfig(reportingConfig,ruleId,location)){return;}if(opts){message=message.replace(/\\{\\{\\s*([^{}]+?)\\s*\\}\\}/g,function(fullMatch,term){if(term in opts){return opts[term];}// Preserve old behavior: If parameter name not provided, don't replace it.\nreturn fullMatch;});}var problem={ruleId:ruleId,severity:severity,message:message,line:location.line,column:location.column+1,// switch to 1-base instead of 0-base\nnodeType:node&&node.type,source:sourceCode.lines[location.line-1]||\"\"};// Define endLine and endColumn if exists.\nif(endLocation){problem.endLine=endLocation.line;problem.endColumn=endLocation.column+1;// switch to 1-base instead of 0-base\n}// ensure there's range and text properties, otherwise it's not a valid fix\nif(fix&&Array.isArray(fix.range)&&typeof fix.text===\"string\"){// If rule uses fix, has metadata, but has no metadata.fixable, we should throw\nif(meta&&!meta.fixable){throw new Error(\"Fixable rules should export a `meta.fixable` property.\");}problem.fix=fix;}messages.push(problem);};/**\n     * Gets the SourceCode object representing the parsed source.\n     * @returns {SourceCode} The SourceCode object.\n     */api.getSourceCode=function(){return sourceCode;};// methods that exist on SourceCode object\nvar externalMethods={getSource:\"getText\",getSourceLines:\"getLines\",getAllComments:\"getAllComments\",getNodeByRangeIndex:\"getNodeByRangeIndex\",getComments:\"getComments\",getJSDocComment:\"getJSDocComment\",getFirstToken:\"getFirstToken\",getFirstTokens:\"getFirstTokens\",getLastToken:\"getLastToken\",getLastTokens:\"getLastTokens\",getTokenAfter:\"getTokenAfter\",getTokenBefore:\"getTokenBefore\",getTokenByRangeStart:\"getTokenByRangeStart\",getTokens:\"getTokens\",getTokensAfter:\"getTokensAfter\",getTokensBefore:\"getTokensBefore\",getTokensBetween:\"getTokensBetween\"};// copy over methods\n(0,_keys4.default)(externalMethods).forEach(function(methodName){var exMethodName=externalMethods[methodName];// All functions expected to have less arguments than 5.\napi[methodName]=function(a,b,c,d,e){if(sourceCode){return sourceCode[exMethodName](a,b,c,d,e);}return null;};});/**\n     * Gets nodes that are ancestors of current node.\n     * @returns {ASTNode[]} Array of objects representing ancestors.\n     */api.getAncestors=function(){return traverser.parents();};/**\n     * Gets the scope for the current node.\n     * @returns {Object} An object representing the current node's scope.\n     */api.getScope=function(){var parents=traverser.parents();// Don't do this for Program nodes - they have no parents\nif(parents.length){// if current node introduces a scope, add it to the list\nvar current=traverser.current();if(currentConfig.parserOptions.ecmaVersion>=6){if([\"BlockStatement\",\"SwitchStatement\",\"CatchClause\",\"FunctionDeclaration\",\"FunctionExpression\",\"ArrowFunctionExpression\"].indexOf(current.type)>=0){parents.push(current);}}else{if([\"FunctionDeclaration\",\"FunctionExpression\",\"ArrowFunctionExpression\"].indexOf(current.type)>=0){parents.push(current);}}// Ascend the current node's parents\nfor(var i=parents.length-1;i>=0;--i){// Get the innermost scope\nvar scope=scopeManager.acquire(parents[i],true);if(scope){if(scope.type===\"function-expression-name\"){return scope.childScopes[0];}return scope;}}}return currentScopes[0];};/**\n     * Record that a particular variable has been used in code\n     * @param {string} name The name of the variable to mark as used\n     * @returns {boolean} True if the variable was found and marked as used,\n     *      false if not.\n     */api.markVariableAsUsed=function(name){var hasGlobalReturn=currentConfig.parserOptions.ecmaFeatures&&currentConfig.parserOptions.ecmaFeatures.globalReturn,specialScope=hasGlobalReturn||currentConfig.parserOptions.sourceType===\"module\";var scope=this.getScope(),i=void 0,len=void 0;// Special Node.js scope means we need to start one level deeper\nif(scope.type===\"global\"&&specialScope){scope=scope.childScopes[0];}do{var variables=scope.variables;for(i=0,len=variables.length;i<len;i++){if(variables[i].name===name){variables[i].eslintUsed=true;return true;}}}while(scope=scope.upper);return false;};/**\n     * Gets the filename for the currently parsed source.\n     * @returns {string} The filename associated with the source being parsed.\n     *     Defaults to \"<input>\" if no filename info is present.\n     */api.getFilename=function(){if(typeof currentFilename===\"string\"){return currentFilename;}return\"<input>\";};/**\n     * Defines a new linting rule.\n     * @param {string} ruleId A unique rule identifier\n     * @param {Function} ruleModule Function from context to object mapping AST node types to event handlers\n     * @returns {void}\n     */var defineRule=api.defineRule=function(ruleId,ruleModule){rules.define(ruleId,ruleModule);};/**\n     * Defines many new linting rules.\n     * @param {Object} rulesToDefine map from unique rule identifier to rule\n     * @returns {void}\n     */api.defineRules=function(rulesToDefine){(0,_getOwnPropertyNames2.default)(rulesToDefine).forEach(function(ruleId){defineRule(ruleId,rulesToDefine[ruleId]);});};/**\n     * Gets the default eslint configuration.\n     * @returns {Object} Object mapping rule IDs to their default configurations\n     */api.defaults=function(){return require(\"../conf/eslint-recommended\");};/**\n     * Gets an object with all loaded rules.\n     * @returns {Map} All loaded rules\n     */api.getRules=function(){return rules.getAllLoadedRules();};api.version=pkg.version;/**\n     * Gets variables that are declared by a specified node.\n     *\n     * The variables are its `defs[].node` or `defs[].parent` is same as the specified node.\n     * Specifically, below:\n     *\n     * - `VariableDeclaration` - variables of its all declarators.\n     * - `VariableDeclarator` - variables.\n     * - `FunctionDeclaration`/`FunctionExpression` - its function name and parameters.\n     * - `ArrowFunctionExpression` - its parameters.\n     * - `ClassDeclaration`/`ClassExpression` - its class name.\n     * - `CatchClause` - variables of its exception.\n     * - `ImportDeclaration` - variables of  its all specifiers.\n     * - `ImportSpecifier`/`ImportDefaultSpecifier`/`ImportNamespaceSpecifier` - a variable.\n     * - others - always an empty array.\n     *\n     * @param {ASTNode} node A node to get.\n     * @returns {escope.Variable[]} Variables that are declared by the node.\n     */api.getDeclaredVariables=function(node){return scopeManager&&scopeManager.getDeclaredVariables(node)||[];};return api;}();},{\"../conf/blank-script.json\":1,\"../conf/eslint-recommended\":3,\"../conf/replacements.json\":4,\"../package.json\":604,\"./code-path-analysis/code-path-analyzer\":606,\"./config/config-ops\":613,\"./config/config-validator\":614,\"./config/environments\":615,\"./rule-context\":618,\"./rules\":619,\"./timing\":864,\"./util/comment-event-generator\":878,\"./util/node-event-generator\":881,\"./util/source-code\":884,\"./util/traverser\":885,\"assert\":11,\"babel-eslint\":19,\"escope\":256,\"events\":367,\"levn\":418}],617:[function(require,module,exports){\"use strict\";module.exports=function(){var rules=(0,_create4.default)(null);rules[\"accessor-pairs\"]=require(\"./rules/accessor-pairs\");rules[\"array-bracket-spacing\"]=require(\"./rules/array-bracket-spacing\");rules[\"array-callback-return\"]=require(\"./rules/array-callback-return\");rules[\"arrow-body-style\"]=require(\"./rules/arrow-body-style\");rules[\"arrow-parens\"]=require(\"./rules/arrow-parens\");rules[\"arrow-spacing\"]=require(\"./rules/arrow-spacing\");rules[\"block-scoped-var\"]=require(\"./rules/block-scoped-var\");rules[\"block-spacing\"]=require(\"./rules/block-spacing\");rules[\"brace-style\"]=require(\"./rules/brace-style\");rules[\"callback-return\"]=require(\"./rules/callback-return\");rules[\"camelcase\"]=require(\"./rules/camelcase\");rules[\"capitalized-comments\"]=require(\"./rules/capitalized-comments\");rules[\"class-methods-use-this\"]=require(\"./rules/class-methods-use-this\");rules[\"comma-dangle\"]=require(\"./rules/comma-dangle\");rules[\"comma-spacing\"]=require(\"./rules/comma-spacing\");rules[\"comma-style\"]=require(\"./rules/comma-style\");rules[\"complexity\"]=require(\"./rules/complexity\");rules[\"computed-property-spacing\"]=require(\"./rules/computed-property-spacing\");rules[\"consistent-return\"]=require(\"./rules/consistent-return\");rules[\"consistent-this\"]=require(\"./rules/consistent-this\");rules[\"constructor-super\"]=require(\"./rules/constructor-super\");rules[\"curly\"]=require(\"./rules/curly\");rules[\"default-case\"]=require(\"./rules/default-case\");rules[\"dot-location\"]=require(\"./rules/dot-location\");rules[\"dot-notation\"]=require(\"./rules/dot-notation\");rules[\"eol-last\"]=require(\"./rules/eol-last\");rules[\"eqeqeq\"]=require(\"./rules/eqeqeq\");rules[\"func-call-spacing\"]=require(\"./rules/func-call-spacing\");rules[\"func-name-matching\"]=require(\"./rules/func-name-matching\");rules[\"func-names\"]=require(\"./rules/func-names\");rules[\"func-style\"]=require(\"./rules/func-style\");rules[\"generator-star-spacing\"]=require(\"./rules/generator-star-spacing\");rules[\"global-require\"]=require(\"./rules/global-require\");rules[\"guard-for-in\"]=require(\"./rules/guard-for-in\");rules[\"handle-callback-err\"]=require(\"./rules/handle-callback-err\");rules[\"id-blacklist\"]=require(\"./rules/id-blacklist\");rules[\"id-length\"]=require(\"./rules/id-length\");rules[\"id-match\"]=require(\"./rules/id-match\");rules[\"indent\"]=require(\"./rules/indent\");rules[\"init-declarations\"]=require(\"./rules/init-declarations\");rules[\"jsx-quotes\"]=require(\"./rules/jsx-quotes\");rules[\"key-spacing\"]=require(\"./rules/key-spacing\");rules[\"keyword-spacing\"]=require(\"./rules/keyword-spacing\");rules[\"line-comment-position\"]=require(\"./rules/line-comment-position\");rules[\"linebreak-style\"]=require(\"./rules/linebreak-style\");rules[\"lines-around-comment\"]=require(\"./rules/lines-around-comment\");rules[\"lines-around-directive\"]=require(\"./rules/lines-around-directive\");rules[\"max-depth\"]=require(\"./rules/max-depth\");rules[\"max-len\"]=require(\"./rules/max-len\");rules[\"max-lines\"]=require(\"./rules/max-lines\");rules[\"max-nested-callbacks\"]=require(\"./rules/max-nested-callbacks\");rules[\"max-params\"]=require(\"./rules/max-params\");rules[\"max-statements-per-line\"]=require(\"./rules/max-statements-per-line\");rules[\"max-statements\"]=require(\"./rules/max-statements\");rules[\"multiline-ternary\"]=require(\"./rules/multiline-ternary\");rules[\"new-cap\"]=require(\"./rules/new-cap\");rules[\"new-parens\"]=require(\"./rules/new-parens\");rules[\"newline-after-var\"]=require(\"./rules/newline-after-var\");rules[\"newline-before-return\"]=require(\"./rules/newline-before-return\");rules[\"newline-per-chained-call\"]=require(\"./rules/newline-per-chained-call\");rules[\"no-alert\"]=require(\"./rules/no-alert\");rules[\"no-array-constructor\"]=require(\"./rules/no-array-constructor\");rules[\"no-await-in-loop\"]=require(\"./rules/no-await-in-loop\");rules[\"no-bitwise\"]=require(\"./rules/no-bitwise\");rules[\"no-caller\"]=require(\"./rules/no-caller\");rules[\"no-case-declarations\"]=require(\"./rules/no-case-declarations\");rules[\"no-catch-shadow\"]=require(\"./rules/no-catch-shadow\");rules[\"no-class-assign\"]=require(\"./rules/no-class-assign\");rules[\"no-compare-neg-zero\"]=require(\"./rules/no-compare-neg-zero\");rules[\"no-cond-assign\"]=require(\"./rules/no-cond-assign\");rules[\"no-confusing-arrow\"]=require(\"./rules/no-confusing-arrow\");rules[\"no-console\"]=require(\"./rules/no-console\");rules[\"no-const-assign\"]=require(\"./rules/no-const-assign\");rules[\"no-constant-condition\"]=require(\"./rules/no-constant-condition\");rules[\"no-continue\"]=require(\"./rules/no-continue\");rules[\"no-control-regex\"]=require(\"./rules/no-control-regex\");rules[\"no-debugger\"]=require(\"./rules/no-debugger\");rules[\"no-delete-var\"]=require(\"./rules/no-delete-var\");rules[\"no-div-regex\"]=require(\"./rules/no-div-regex\");rules[\"no-dupe-args\"]=require(\"./rules/no-dupe-args\");rules[\"no-dupe-class-members\"]=require(\"./rules/no-dupe-class-members\");rules[\"no-dupe-keys\"]=require(\"./rules/no-dupe-keys\");rules[\"no-duplicate-case\"]=require(\"./rules/no-duplicate-case\");rules[\"no-duplicate-imports\"]=require(\"./rules/no-duplicate-imports\");rules[\"no-else-return\"]=require(\"./rules/no-else-return\");rules[\"no-empty-character-class\"]=require(\"./rules/no-empty-character-class\");rules[\"no-empty-function\"]=require(\"./rules/no-empty-function\");rules[\"no-empty-pattern\"]=require(\"./rules/no-empty-pattern\");rules[\"no-empty\"]=require(\"./rules/no-empty\");rules[\"no-eq-null\"]=require(\"./rules/no-eq-null\");rules[\"no-eval\"]=require(\"./rules/no-eval\");rules[\"no-ex-assign\"]=require(\"./rules/no-ex-assign\");rules[\"no-extend-native\"]=require(\"./rules/no-extend-native\");rules[\"no-extra-bind\"]=require(\"./rules/no-extra-bind\");rules[\"no-extra-boolean-cast\"]=require(\"./rules/no-extra-boolean-cast\");rules[\"no-extra-label\"]=require(\"./rules/no-extra-label\");rules[\"no-extra-parens\"]=require(\"./rules/no-extra-parens\");rules[\"no-extra-semi\"]=require(\"./rules/no-extra-semi\");rules[\"no-fallthrough\"]=require(\"./rules/no-fallthrough\");rules[\"no-floating-decimal\"]=require(\"./rules/no-floating-decimal\");rules[\"no-func-assign\"]=require(\"./rules/no-func-assign\");rules[\"no-global-assign\"]=require(\"./rules/no-global-assign\");rules[\"no-implicit-coercion\"]=require(\"./rules/no-implicit-coercion\");rules[\"no-implicit-globals\"]=require(\"./rules/no-implicit-globals\");rules[\"no-implied-eval\"]=require(\"./rules/no-implied-eval\");rules[\"no-inline-comments\"]=require(\"./rules/no-inline-comments\");rules[\"no-inner-declarations\"]=require(\"./rules/no-inner-declarations\");rules[\"no-invalid-regexp\"]=require(\"./rules/no-invalid-regexp\");rules[\"no-invalid-this\"]=require(\"./rules/no-invalid-this\");rules[\"no-irregular-whitespace\"]=require(\"./rules/no-irregular-whitespace\");rules[\"no-iterator\"]=require(\"./rules/no-iterator\");rules[\"no-label-var\"]=require(\"./rules/no-label-var\");rules[\"no-labels\"]=require(\"./rules/no-labels\");rules[\"no-lone-blocks\"]=require(\"./rules/no-lone-blocks\");rules[\"no-lonely-if\"]=require(\"./rules/no-lonely-if\");rules[\"no-loop-func\"]=require(\"./rules/no-loop-func\");rules[\"no-magic-numbers\"]=require(\"./rules/no-magic-numbers\");rules[\"no-mixed-operators\"]=require(\"./rules/no-mixed-operators\");rules[\"no-mixed-requires\"]=require(\"./rules/no-mixed-requires\");rules[\"no-mixed-spaces-and-tabs\"]=require(\"./rules/no-mixed-spaces-and-tabs\");rules[\"no-multi-assign\"]=require(\"./rules/no-multi-assign\");rules[\"no-multi-spaces\"]=require(\"./rules/no-multi-spaces\");rules[\"no-multi-str\"]=require(\"./rules/no-multi-str\");rules[\"no-multiple-empty-lines\"]=require(\"./rules/no-multiple-empty-lines\");rules[\"no-native-reassign\"]=require(\"./rules/no-native-reassign\");rules[\"no-negated-condition\"]=require(\"./rules/no-negated-condition\");rules[\"no-negated-in-lhs\"]=require(\"./rules/no-negated-in-lhs\");rules[\"no-nested-ternary\"]=require(\"./rules/no-nested-ternary\");rules[\"no-new-func\"]=require(\"./rules/no-new-func\");rules[\"no-new-object\"]=require(\"./rules/no-new-object\");rules[\"no-new-require\"]=require(\"./rules/no-new-require\");rules[\"no-new-symbol\"]=require(\"./rules/no-new-symbol\");rules[\"no-new-wrappers\"]=require(\"./rules/no-new-wrappers\");rules[\"no-new\"]=require(\"./rules/no-new\");rules[\"no-obj-calls\"]=require(\"./rules/no-obj-calls\");rules[\"no-octal-escape\"]=require(\"./rules/no-octal-escape\");rules[\"no-octal\"]=require(\"./rules/no-octal\");rules[\"no-param-reassign\"]=require(\"./rules/no-param-reassign\");rules[\"no-path-concat\"]=require(\"./rules/no-path-concat\");rules[\"no-plusplus\"]=require(\"./rules/no-plusplus\");rules[\"no-process-env\"]=require(\"./rules/no-process-env\");rules[\"no-process-exit\"]=require(\"./rules/no-process-exit\");rules[\"no-proto\"]=require(\"./rules/no-proto\");rules[\"no-prototype-builtins\"]=require(\"./rules/no-prototype-builtins\");rules[\"no-redeclare\"]=require(\"./rules/no-redeclare\");rules[\"no-regex-spaces\"]=require(\"./rules/no-regex-spaces\");rules[\"no-restricted-globals\"]=require(\"./rules/no-restricted-globals\");rules[\"no-restricted-imports\"]=require(\"./rules/no-restricted-imports\");rules[\"no-restricted-modules\"]=require(\"./rules/no-restricted-modules\");rules[\"no-restricted-properties\"]=require(\"./rules/no-restricted-properties\");rules[\"no-restricted-syntax\"]=require(\"./rules/no-restricted-syntax\");rules[\"no-return-assign\"]=require(\"./rules/no-return-assign\");rules[\"no-return-await\"]=require(\"./rules/no-return-await\");rules[\"no-script-url\"]=require(\"./rules/no-script-url\");rules[\"no-self-assign\"]=require(\"./rules/no-self-assign\");rules[\"no-self-compare\"]=require(\"./rules/no-self-compare\");rules[\"no-sequences\"]=require(\"./rules/no-sequences\");rules[\"no-shadow-restricted-names\"]=require(\"./rules/no-shadow-restricted-names\");rules[\"no-shadow\"]=require(\"./rules/no-shadow\");rules[\"no-spaced-func\"]=require(\"./rules/no-spaced-func\");rules[\"no-sparse-arrays\"]=require(\"./rules/no-sparse-arrays\");rules[\"no-sync\"]=require(\"./rules/no-sync\");rules[\"no-tabs\"]=require(\"./rules/no-tabs\");rules[\"no-template-curly-in-string\"]=require(\"./rules/no-template-curly-in-string\");rules[\"no-ternary\"]=require(\"./rules/no-ternary\");rules[\"no-this-before-super\"]=require(\"./rules/no-this-before-super\");rules[\"no-throw-literal\"]=require(\"./rules/no-throw-literal\");rules[\"no-trailing-spaces\"]=require(\"./rules/no-trailing-spaces\");rules[\"no-undef-init\"]=require(\"./rules/no-undef-init\");rules[\"no-undef\"]=require(\"./rules/no-undef\");rules[\"no-undefined\"]=require(\"./rules/no-undefined\");rules[\"no-underscore-dangle\"]=require(\"./rules/no-underscore-dangle\");rules[\"no-unexpected-multiline\"]=require(\"./rules/no-unexpected-multiline\");rules[\"no-unmodified-loop-condition\"]=require(\"./rules/no-unmodified-loop-condition\");rules[\"no-unneeded-ternary\"]=require(\"./rules/no-unneeded-ternary\");rules[\"no-unreachable\"]=require(\"./rules/no-unreachable\");rules[\"no-unsafe-finally\"]=require(\"./rules/no-unsafe-finally\");rules[\"no-unsafe-negation\"]=require(\"./rules/no-unsafe-negation\");rules[\"no-unused-expressions\"]=require(\"./rules/no-unused-expressions\");rules[\"no-unused-labels\"]=require(\"./rules/no-unused-labels\");rules[\"no-unused-vars\"]=require(\"./rules/no-unused-vars\");rules[\"no-use-before-define\"]=require(\"./rules/no-use-before-define\");rules[\"no-useless-call\"]=require(\"./rules/no-useless-call\");rules[\"no-useless-computed-key\"]=require(\"./rules/no-useless-computed-key\");rules[\"no-useless-concat\"]=require(\"./rules/no-useless-concat\");rules[\"no-useless-constructor\"]=require(\"./rules/no-useless-constructor\");rules[\"no-useless-escape\"]=require(\"./rules/no-useless-escape\");rules[\"no-useless-rename\"]=require(\"./rules/no-useless-rename\");rules[\"no-useless-return\"]=require(\"./rules/no-useless-return\");rules[\"no-var\"]=require(\"./rules/no-var\");rules[\"no-void\"]=require(\"./rules/no-void\");rules[\"no-warning-comments\"]=require(\"./rules/no-warning-comments\");rules[\"no-whitespace-before-property\"]=require(\"./rules/no-whitespace-before-property\");rules[\"no-with\"]=require(\"./rules/no-with\");rules[\"nonblock-statement-body-position\"]=require(\"./rules/nonblock-statement-body-position\");rules[\"object-curly-newline\"]=require(\"./rules/object-curly-newline\");rules[\"object-curly-spacing\"]=require(\"./rules/object-curly-spacing\");rules[\"object-property-newline\"]=require(\"./rules/object-property-newline\");rules[\"object-shorthand\"]=require(\"./rules/object-shorthand\");rules[\"one-var-declaration-per-line\"]=require(\"./rules/one-var-declaration-per-line\");rules[\"one-var\"]=require(\"./rules/one-var\");rules[\"operator-assignment\"]=require(\"./rules/operator-assignment\");rules[\"operator-linebreak\"]=require(\"./rules/operator-linebreak\");rules[\"padded-blocks\"]=require(\"./rules/padded-blocks\");rules[\"prefer-arrow-callback\"]=require(\"./rules/prefer-arrow-callback\");rules[\"prefer-const\"]=require(\"./rules/prefer-const\");rules[\"prefer-destructuring\"]=require(\"./rules/prefer-destructuring\");rules[\"prefer-numeric-literals\"]=require(\"./rules/prefer-numeric-literals\");rules[\"prefer-promise-reject-errors\"]=require(\"./rules/prefer-promise-reject-errors\");rules[\"prefer-reflect\"]=require(\"./rules/prefer-reflect\");rules[\"prefer-rest-params\"]=require(\"./rules/prefer-rest-params\");rules[\"prefer-spread\"]=require(\"./rules/prefer-spread\");rules[\"prefer-template\"]=require(\"./rules/prefer-template\");rules[\"quote-props\"]=require(\"./rules/quote-props\");rules[\"quotes\"]=require(\"./rules/quotes\");rules[\"radix\"]=require(\"./rules/radix\");rules[\"require-await\"]=require(\"./rules/require-await\");rules[\"require-jsdoc\"]=require(\"./rules/require-jsdoc\");rules[\"require-yield\"]=require(\"./rules/require-yield\");rules[\"rest-spread-spacing\"]=require(\"./rules/rest-spread-spacing\");rules[\"semi-spacing\"]=require(\"./rules/semi-spacing\");rules[\"semi\"]=require(\"./rules/semi\");rules[\"sort-imports\"]=require(\"./rules/sort-imports\");rules[\"sort-keys\"]=require(\"./rules/sort-keys\");rules[\"sort-vars\"]=require(\"./rules/sort-vars\");rules[\"space-before-blocks\"]=require(\"./rules/space-before-blocks\");rules[\"space-before-function-paren\"]=require(\"./rules/space-before-function-paren\");rules[\"space-in-parens\"]=require(\"./rules/space-in-parens\");rules[\"space-infix-ops\"]=require(\"./rules/space-infix-ops\");rules[\"space-unary-ops\"]=require(\"./rules/space-unary-ops\");rules[\"spaced-comment\"]=require(\"./rules/spaced-comment\");rules[\"strict\"]=require(\"./rules/strict\");rules[\"symbol-description\"]=require(\"./rules/symbol-description\");rules[\"template-curly-spacing\"]=require(\"./rules/template-curly-spacing\");rules[\"template-tag-spacing\"]=require(\"./rules/template-tag-spacing\");rules[\"unicode-bom\"]=require(\"./rules/unicode-bom\");rules[\"use-isnan\"]=require(\"./rules/use-isnan\");rules[\"valid-jsdoc\"]=require(\"./rules/valid-jsdoc\");rules[\"valid-typeof\"]=require(\"./rules/valid-typeof\");rules[\"vars-on-top\"]=require(\"./rules/vars-on-top\");rules[\"wrap-iife\"]=require(\"./rules/wrap-iife\");rules[\"wrap-regex\"]=require(\"./rules/wrap-regex\");rules[\"yield-star-spacing\"]=require(\"./rules/yield-star-spacing\");rules[\"yoda\"]=require(\"./rules/yoda\");rules[\"babel/array-bracket-spacing\"]=require(\"eslint-plugin-babel//rules//array-bracket-spacing\");rules[\"babel/arrow-parens\"]=require(\"eslint-plugin-babel//rules//arrow-parens\");rules[\"babel/flow-object-type\"]=require(\"eslint-plugin-babel//rules//flow-object-type\");rules[\"babel/func-params-comma-dangle\"]=require(\"eslint-plugin-babel//rules//func-params-comma-dangle\");rules[\"babel/generator-star-spacing\"]=require(\"eslint-plugin-babel//rules//generator-star-spacing\");rules[\"babel/new-cap\"]=require(\"eslint-plugin-babel//rules//new-cap\");rules[\"babel/no-await-in-loop\"]=require(\"eslint-plugin-babel//rules//no-await-in-loop\");rules[\"babel/no-invalid-this\"]=require(\"eslint-plugin-babel//rules//no-invalid-this\");rules[\"babel/object-curly-spacing\"]=require(\"eslint-plugin-babel//rules//object-curly-spacing\");rules[\"babel/object-shorthand\"]=require(\"eslint-plugin-babel//rules//object-shorthand\");rules[\"babel/semi\"]=require(\"eslint-plugin-babel//rules//semi\");rules[\"react/display-name\"]=require(\"eslint-plugin-react//lib/rules//display-name\");rules[\"react/forbid-component-props\"]=require(\"eslint-plugin-react//lib/rules//forbid-component-props\");rules[\"react/forbid-elements\"]=require(\"eslint-plugin-react//lib/rules//forbid-elements\");rules[\"react/forbid-foreign-prop-types\"]=require(\"eslint-plugin-react//lib/rules//forbid-foreign-prop-types\");rules[\"react/forbid-prop-types\"]=require(\"eslint-plugin-react//lib/rules//forbid-prop-types\");rules[\"react/jsx-boolean-value\"]=require(\"eslint-plugin-react//lib/rules//jsx-boolean-value\");rules[\"react/jsx-closing-bracket-location\"]=require(\"eslint-plugin-react//lib/rules//jsx-closing-bracket-location\");rules[\"react/jsx-curly-spacing\"]=require(\"eslint-plugin-react//lib/rules//jsx-curly-spacing\");rules[\"react/jsx-equals-spacing\"]=require(\"eslint-plugin-react//lib/rules//jsx-equals-spacing\");rules[\"react/jsx-filename-extension\"]=require(\"eslint-plugin-react//lib/rules//jsx-filename-extension\");rules[\"react/jsx-first-prop-new-line\"]=require(\"eslint-plugin-react//lib/rules//jsx-first-prop-new-line\");rules[\"react/jsx-handler-names\"]=require(\"eslint-plugin-react//lib/rules//jsx-handler-names\");rules[\"react/jsx-indent-props\"]=require(\"eslint-plugin-react//lib/rules//jsx-indent-props\");rules[\"react/jsx-indent\"]=require(\"eslint-plugin-react//lib/rules//jsx-indent\");rules[\"react/jsx-key\"]=require(\"eslint-plugin-react//lib/rules//jsx-key\");rules[\"react/jsx-max-props-per-line\"]=require(\"eslint-plugin-react//lib/rules//jsx-max-props-per-line\");rules[\"react/jsx-no-bind\"]=require(\"eslint-plugin-react//lib/rules//jsx-no-bind\");rules[\"react/jsx-no-comment-textnodes\"]=require(\"eslint-plugin-react//lib/rules//jsx-no-comment-textnodes\");rules[\"react/jsx-no-duplicate-props\"]=require(\"eslint-plugin-react//lib/rules//jsx-no-duplicate-props\");rules[\"react/jsx-no-literals\"]=require(\"eslint-plugin-react//lib/rules//jsx-no-literals\");rules[\"react/jsx-no-target-blank\"]=require(\"eslint-plugin-react//lib/rules//jsx-no-target-blank\");rules[\"react/jsx-no-undef\"]=require(\"eslint-plugin-react//lib/rules//jsx-no-undef\");rules[\"react/jsx-pascal-case\"]=require(\"eslint-plugin-react//lib/rules//jsx-pascal-case\");rules[\"react/jsx-sort-props\"]=require(\"eslint-plugin-react//lib/rules//jsx-sort-props\");rules[\"react/jsx-space-before-closing\"]=require(\"eslint-plugin-react//lib/rules//jsx-space-before-closing\");rules[\"react/jsx-tag-spacing\"]=require(\"eslint-plugin-react//lib/rules//jsx-tag-spacing\");rules[\"react/jsx-uses-react\"]=require(\"eslint-plugin-react//lib/rules//jsx-uses-react\");rules[\"react/jsx-uses-vars\"]=require(\"eslint-plugin-react//lib/rules//jsx-uses-vars\");rules[\"react/jsx-wrap-multilines\"]=require(\"eslint-plugin-react//lib/rules//jsx-wrap-multilines\");rules[\"react/no-array-index-key\"]=require(\"eslint-plugin-react//lib/rules//no-array-index-key\");rules[\"react/no-children-prop\"]=require(\"eslint-plugin-react//lib/rules//no-children-prop\");rules[\"react/no-comment-textnodes\"]=require(\"eslint-plugin-react//lib/rules//no-comment-textnodes\");rules[\"react/no-danger-with-children\"]=require(\"eslint-plugin-react//lib/rules//no-danger-with-children\");rules[\"react/no-danger\"]=require(\"eslint-plugin-react//lib/rules//no-danger\");rules[\"react/no-deprecated\"]=require(\"eslint-plugin-react//lib/rules//no-deprecated\");rules[\"react/no-did-mount-set-state\"]=require(\"eslint-plugin-react//lib/rules//no-did-mount-set-state\");rules[\"react/no-did-update-set-state\"]=require(\"eslint-plugin-react//lib/rules//no-did-update-set-state\");rules[\"react/no-direct-mutation-state\"]=require(\"eslint-plugin-react//lib/rules//no-direct-mutation-state\");rules[\"react/no-find-dom-node\"]=require(\"eslint-plugin-react//lib/rules//no-find-dom-node\");rules[\"react/no-is-mounted\"]=require(\"eslint-plugin-react//lib/rules//no-is-mounted\");rules[\"react/no-multi-comp\"]=require(\"eslint-plugin-react//lib/rules//no-multi-comp\");rules[\"react/no-render-return-value\"]=require(\"eslint-plugin-react//lib/rules//no-render-return-value\");rules[\"react/no-set-state\"]=require(\"eslint-plugin-react//lib/rules//no-set-state\");rules[\"react/no-string-refs\"]=require(\"eslint-plugin-react//lib/rules//no-string-refs\");rules[\"react/no-unescaped-entities\"]=require(\"eslint-plugin-react//lib/rules//no-unescaped-entities\");rules[\"react/no-unknown-property\"]=require(\"eslint-plugin-react//lib/rules//no-unknown-property\");rules[\"react/no-unused-prop-types\"]=require(\"eslint-plugin-react//lib/rules//no-unused-prop-types\");rules[\"react/prefer-es6-class\"]=require(\"eslint-plugin-react//lib/rules//prefer-es6-class\");rules[\"react/prefer-stateless-function\"]=require(\"eslint-plugin-react//lib/rules//prefer-stateless-function\");rules[\"react/prop-types\"]=require(\"eslint-plugin-react//lib/rules//prop-types\");rules[\"react/react-in-jsx-scope\"]=require(\"eslint-plugin-react//lib/rules//react-in-jsx-scope\");rules[\"react/require-default-props\"]=require(\"eslint-plugin-react//lib/rules//require-default-props\");rules[\"react/require-extension\"]=require(\"eslint-plugin-react//lib/rules//require-extension\");rules[\"react/require-optimization\"]=require(\"eslint-plugin-react//lib/rules//require-optimization\");rules[\"react/require-render-return\"]=require(\"eslint-plugin-react//lib/rules//require-render-return\");rules[\"react/self-closing-comp\"]=require(\"eslint-plugin-react//lib/rules//self-closing-comp\");rules[\"react/sort-comp\"]=require(\"eslint-plugin-react//lib/rules//sort-comp\");rules[\"react/sort-prop-types\"]=require(\"eslint-plugin-react//lib/rules//sort-prop-types\");rules[\"react/style-prop-object\"]=require(\"eslint-plugin-react//lib/rules//style-prop-object\");rules[\"react/void-dom-elements-no-children\"]=require(\"eslint-plugin-react//lib/rules//void-dom-elements-no-children\");rules[\"react/wrap-multilines\"]=require(\"eslint-plugin-react//lib/rules//wrap-multilines\");rules[\"react-native/no-color-literals\"]=require(\"eslint-plugin-react-native//lib/rules//no-color-literals\");rules[\"react-native/no-inline-styles\"]=require(\"eslint-plugin-react-native//lib/rules//no-inline-styles\");rules[\"react-native/no-unused-styles\"]=require(\"eslint-plugin-react-native//lib/rules//no-unused-styles\");rules[\"react-native/split-platform-components\"]=require(\"eslint-plugin-react-native//lib/rules//split-platform-components\");return rules;};},{\"./rules/accessor-pairs\":620,\"./rules/array-bracket-spacing\":621,\"./rules/array-callback-return\":622,\"./rules/arrow-body-style\":623,\"./rules/arrow-parens\":624,\"./rules/arrow-spacing\":625,\"./rules/block-scoped-var\":626,\"./rules/block-spacing\":627,\"./rules/brace-style\":628,\"./rules/callback-return\":629,\"./rules/camelcase\":630,\"./rules/capitalized-comments\":631,\"./rules/class-methods-use-this\":632,\"./rules/comma-dangle\":633,\"./rules/comma-spacing\":634,\"./rules/comma-style\":635,\"./rules/complexity\":636,\"./rules/computed-property-spacing\":637,\"./rules/consistent-return\":638,\"./rules/consistent-this\":639,\"./rules/constructor-super\":640,\"./rules/curly\":641,\"./rules/default-case\":642,\"./rules/dot-location\":643,\"./rules/dot-notation\":644,\"./rules/eol-last\":645,\"./rules/eqeqeq\":646,\"./rules/func-call-spacing\":647,\"./rules/func-name-matching\":648,\"./rules/func-names\":649,\"./rules/func-style\":650,\"./rules/generator-star-spacing\":651,\"./rules/global-require\":652,\"./rules/guard-for-in\":653,\"./rules/handle-callback-err\":654,\"./rules/id-blacklist\":655,\"./rules/id-length\":656,\"./rules/id-match\":657,\"./rules/indent\":658,\"./rules/init-declarations\":659,\"./rules/jsx-quotes\":660,\"./rules/key-spacing\":661,\"./rules/keyword-spacing\":662,\"./rules/line-comment-position\":663,\"./rules/linebreak-style\":664,\"./rules/lines-around-comment\":665,\"./rules/lines-around-directive\":666,\"./rules/max-depth\":667,\"./rules/max-len\":668,\"./rules/max-lines\":669,\"./rules/max-nested-callbacks\":670,\"./rules/max-params\":671,\"./rules/max-statements\":673,\"./rules/max-statements-per-line\":672,\"./rules/multiline-ternary\":674,\"./rules/new-cap\":675,\"./rules/new-parens\":676,\"./rules/newline-after-var\":677,\"./rules/newline-before-return\":678,\"./rules/newline-per-chained-call\":679,\"./rules/no-alert\":680,\"./rules/no-array-constructor\":681,\"./rules/no-await-in-loop\":682,\"./rules/no-bitwise\":683,\"./rules/no-caller\":684,\"./rules/no-case-declarations\":685,\"./rules/no-catch-shadow\":686,\"./rules/no-class-assign\":687,\"./rules/no-compare-neg-zero\":688,\"./rules/no-cond-assign\":689,\"./rules/no-confusing-arrow\":690,\"./rules/no-console\":691,\"./rules/no-const-assign\":692,\"./rules/no-constant-condition\":693,\"./rules/no-continue\":694,\"./rules/no-control-regex\":695,\"./rules/no-debugger\":696,\"./rules/no-delete-var\":697,\"./rules/no-div-regex\":698,\"./rules/no-dupe-args\":699,\"./rules/no-dupe-class-members\":700,\"./rules/no-dupe-keys\":701,\"./rules/no-duplicate-case\":702,\"./rules/no-duplicate-imports\":703,\"./rules/no-else-return\":704,\"./rules/no-empty\":708,\"./rules/no-empty-character-class\":705,\"./rules/no-empty-function\":706,\"./rules/no-empty-pattern\":707,\"./rules/no-eq-null\":709,\"./rules/no-eval\":710,\"./rules/no-ex-assign\":711,\"./rules/no-extend-native\":712,\"./rules/no-extra-bind\":713,\"./rules/no-extra-boolean-cast\":714,\"./rules/no-extra-label\":715,\"./rules/no-extra-parens\":716,\"./rules/no-extra-semi\":717,\"./rules/no-fallthrough\":718,\"./rules/no-floating-decimal\":719,\"./rules/no-func-assign\":720,\"./rules/no-global-assign\":721,\"./rules/no-implicit-coercion\":722,\"./rules/no-implicit-globals\":723,\"./rules/no-implied-eval\":724,\"./rules/no-inline-comments\":725,\"./rules/no-inner-declarations\":726,\"./rules/no-invalid-regexp\":727,\"./rules/no-invalid-this\":728,\"./rules/no-irregular-whitespace\":729,\"./rules/no-iterator\":730,\"./rules/no-label-var\":731,\"./rules/no-labels\":732,\"./rules/no-lone-blocks\":733,\"./rules/no-lonely-if\":734,\"./rules/no-loop-func\":735,\"./rules/no-magic-numbers\":736,\"./rules/no-mixed-operators\":737,\"./rules/no-mixed-requires\":738,\"./rules/no-mixed-spaces-and-tabs\":739,\"./rules/no-multi-assign\":740,\"./rules/no-multi-spaces\":741,\"./rules/no-multi-str\":742,\"./rules/no-multiple-empty-lines\":743,\"./rules/no-native-reassign\":744,\"./rules/no-negated-condition\":745,\"./rules/no-negated-in-lhs\":746,\"./rules/no-nested-ternary\":747,\"./rules/no-new\":753,\"./rules/no-new-func\":748,\"./rules/no-new-object\":749,\"./rules/no-new-require\":750,\"./rules/no-new-symbol\":751,\"./rules/no-new-wrappers\":752,\"./rules/no-obj-calls\":754,\"./rules/no-octal\":756,\"./rules/no-octal-escape\":755,\"./rules/no-param-reassign\":757,\"./rules/no-path-concat\":758,\"./rules/no-plusplus\":759,\"./rules/no-process-env\":760,\"./rules/no-process-exit\":761,\"./rules/no-proto\":762,\"./rules/no-prototype-builtins\":763,\"./rules/no-redeclare\":764,\"./rules/no-regex-spaces\":765,\"./rules/no-restricted-globals\":766,\"./rules/no-restricted-imports\":767,\"./rules/no-restricted-modules\":768,\"./rules/no-restricted-properties\":769,\"./rules/no-restricted-syntax\":770,\"./rules/no-return-assign\":771,\"./rules/no-return-await\":772,\"./rules/no-script-url\":773,\"./rules/no-self-assign\":774,\"./rules/no-self-compare\":775,\"./rules/no-sequences\":776,\"./rules/no-shadow\":778,\"./rules/no-shadow-restricted-names\":777,\"./rules/no-spaced-func\":779,\"./rules/no-sparse-arrays\":780,\"./rules/no-sync\":781,\"./rules/no-tabs\":782,\"./rules/no-template-curly-in-string\":783,\"./rules/no-ternary\":784,\"./rules/no-this-before-super\":785,\"./rules/no-throw-literal\":786,\"./rules/no-trailing-spaces\":787,\"./rules/no-undef\":789,\"./rules/no-undef-init\":788,\"./rules/no-undefined\":790,\"./rules/no-underscore-dangle\":791,\"./rules/no-unexpected-multiline\":792,\"./rules/no-unmodified-loop-condition\":793,\"./rules/no-unneeded-ternary\":794,\"./rules/no-unreachable\":795,\"./rules/no-unsafe-finally\":796,\"./rules/no-unsafe-negation\":797,\"./rules/no-unused-expressions\":798,\"./rules/no-unused-labels\":799,\"./rules/no-unused-vars\":800,\"./rules/no-use-before-define\":801,\"./rules/no-useless-call\":802,\"./rules/no-useless-computed-key\":803,\"./rules/no-useless-concat\":804,\"./rules/no-useless-constructor\":805,\"./rules/no-useless-escape\":806,\"./rules/no-useless-rename\":807,\"./rules/no-useless-return\":808,\"./rules/no-var\":809,\"./rules/no-void\":810,\"./rules/no-warning-comments\":811,\"./rules/no-whitespace-before-property\":812,\"./rules/no-with\":813,\"./rules/nonblock-statement-body-position\":814,\"./rules/object-curly-newline\":815,\"./rules/object-curly-spacing\":816,\"./rules/object-property-newline\":817,\"./rules/object-shorthand\":818,\"./rules/one-var\":820,\"./rules/one-var-declaration-per-line\":819,\"./rules/operator-assignment\":821,\"./rules/operator-linebreak\":822,\"./rules/padded-blocks\":823,\"./rules/prefer-arrow-callback\":824,\"./rules/prefer-const\":825,\"./rules/prefer-destructuring\":826,\"./rules/prefer-numeric-literals\":827,\"./rules/prefer-promise-reject-errors\":828,\"./rules/prefer-reflect\":829,\"./rules/prefer-rest-params\":830,\"./rules/prefer-spread\":831,\"./rules/prefer-template\":832,\"./rules/quote-props\":833,\"./rules/quotes\":834,\"./rules/radix\":835,\"./rules/require-await\":836,\"./rules/require-jsdoc\":837,\"./rules/require-yield\":838,\"./rules/rest-spread-spacing\":839,\"./rules/semi\":841,\"./rules/semi-spacing\":840,\"./rules/sort-imports\":842,\"./rules/sort-keys\":843,\"./rules/sort-vars\":844,\"./rules/space-before-blocks\":845,\"./rules/space-before-function-paren\":846,\"./rules/space-in-parens\":847,\"./rules/space-infix-ops\":848,\"./rules/space-unary-ops\":849,\"./rules/spaced-comment\":850,\"./rules/strict\":851,\"./rules/symbol-description\":852,\"./rules/template-curly-spacing\":853,\"./rules/template-tag-spacing\":854,\"./rules/unicode-bom\":855,\"./rules/use-isnan\":856,\"./rules/valid-jsdoc\":857,\"./rules/valid-typeof\":858,\"./rules/vars-on-top\":859,\"./rules/wrap-iife\":860,\"./rules/wrap-regex\":861,\"./rules/yield-star-spacing\":862,\"./rules/yoda\":863,\"eslint-plugin-babel//rules//array-bracket-spacing\":265,\"eslint-plugin-babel//rules//arrow-parens\":266,\"eslint-plugin-babel//rules//flow-object-type\":267,\"eslint-plugin-babel//rules//func-params-comma-dangle\":268,\"eslint-plugin-babel//rules//generator-star-spacing\":269,\"eslint-plugin-babel//rules//new-cap\":270,\"eslint-plugin-babel//rules//no-await-in-loop\":271,\"eslint-plugin-babel//rules//no-invalid-this\":272,\"eslint-plugin-babel//rules//object-curly-spacing\":273,\"eslint-plugin-babel//rules//object-shorthand\":274,\"eslint-plugin-babel//rules//semi\":275,\"eslint-plugin-react-native//lib/rules//no-color-literals\":276,\"eslint-plugin-react-native//lib/rules//no-inline-styles\":277,\"eslint-plugin-react-native//lib/rules//no-unused-styles\":278,\"eslint-plugin-react-native//lib/rules//split-platform-components\":279,\"eslint-plugin-react//lib/rules//display-name\":282,\"eslint-plugin-react//lib/rules//forbid-component-props\":283,\"eslint-plugin-react//lib/rules//forbid-elements\":284,\"eslint-plugin-react//lib/rules//forbid-foreign-prop-types\":285,\"eslint-plugin-react//lib/rules//forbid-prop-types\":286,\"eslint-plugin-react//lib/rules//jsx-boolean-value\":287,\"eslint-plugin-react//lib/rules//jsx-closing-bracket-location\":288,\"eslint-plugin-react//lib/rules//jsx-curly-spacing\":289,\"eslint-plugin-react//lib/rules//jsx-equals-spacing\":290,\"eslint-plugin-react//lib/rules//jsx-filename-extension\":291,\"eslint-plugin-react//lib/rules//jsx-first-prop-new-line\":292,\"eslint-plugin-react//lib/rules//jsx-handler-names\":293,\"eslint-plugin-react//lib/rules//jsx-indent\":295,\"eslint-plugin-react//lib/rules//jsx-indent-props\":294,\"eslint-plugin-react//lib/rules//jsx-key\":296,\"eslint-plugin-react//lib/rules//jsx-max-props-per-line\":297,\"eslint-plugin-react//lib/rules//jsx-no-bind\":298,\"eslint-plugin-react//lib/rules//jsx-no-comment-textnodes\":299,\"eslint-plugin-react//lib/rules//jsx-no-duplicate-props\":300,\"eslint-plugin-react//lib/rules//jsx-no-literals\":301,\"eslint-plugin-react//lib/rules//jsx-no-target-blank\":302,\"eslint-plugin-react//lib/rules//jsx-no-undef\":303,\"eslint-plugin-react//lib/rules//jsx-pascal-case\":304,\"eslint-plugin-react//lib/rules//jsx-sort-props\":305,\"eslint-plugin-react//lib/rules//jsx-space-before-closing\":306,\"eslint-plugin-react//lib/rules//jsx-tag-spacing\":307,\"eslint-plugin-react//lib/rules//jsx-uses-react\":308,\"eslint-plugin-react//lib/rules//jsx-uses-vars\":309,\"eslint-plugin-react//lib/rules//jsx-wrap-multilines\":310,\"eslint-plugin-react//lib/rules//no-array-index-key\":311,\"eslint-plugin-react//lib/rules//no-children-prop\":312,\"eslint-plugin-react//lib/rules//no-comment-textnodes\":313,\"eslint-plugin-react//lib/rules//no-danger\":315,\"eslint-plugin-react//lib/rules//no-danger-with-children\":314,\"eslint-plugin-react//lib/rules//no-deprecated\":316,\"eslint-plugin-react//lib/rules//no-did-mount-set-state\":317,\"eslint-plugin-react//lib/rules//no-did-update-set-state\":318,\"eslint-plugin-react//lib/rules//no-direct-mutation-state\":319,\"eslint-plugin-react//lib/rules//no-find-dom-node\":320,\"eslint-plugin-react//lib/rules//no-is-mounted\":321,\"eslint-plugin-react//lib/rules//no-multi-comp\":322,\"eslint-plugin-react//lib/rules//no-render-return-value\":323,\"eslint-plugin-react//lib/rules//no-set-state\":324,\"eslint-plugin-react//lib/rules//no-string-refs\":325,\"eslint-plugin-react//lib/rules//no-unescaped-entities\":326,\"eslint-plugin-react//lib/rules//no-unknown-property\":327,\"eslint-plugin-react//lib/rules//no-unused-prop-types\":328,\"eslint-plugin-react//lib/rules//prefer-es6-class\":329,\"eslint-plugin-react//lib/rules//prefer-stateless-function\":330,\"eslint-plugin-react//lib/rules//prop-types\":331,\"eslint-plugin-react//lib/rules//react-in-jsx-scope\":332,\"eslint-plugin-react//lib/rules//require-default-props\":333,\"eslint-plugin-react//lib/rules//require-extension\":334,\"eslint-plugin-react//lib/rules//require-optimization\":335,\"eslint-plugin-react//lib/rules//require-render-return\":336,\"eslint-plugin-react//lib/rules//self-closing-comp\":337,\"eslint-plugin-react//lib/rules//sort-comp\":338,\"eslint-plugin-react//lib/rules//sort-prop-types\":339,\"eslint-plugin-react//lib/rules//style-prop-object\":340,\"eslint-plugin-react//lib/rules//void-dom-elements-no-children\":341,\"eslint-plugin-react//lib/rules//wrap-multilines\":342}],618:[function(require,module,exports){/**\n * @fileoverview RuleContext utility for rules\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var ruleFixer=require(\"./util/rule-fixer\");//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\nvar PASSTHROUGHS=[\"getAncestors\",\"getDeclaredVariables\",\"getFilename\",\"getScope\",\"markVariableAsUsed\",// DEPRECATED\n\"getAllComments\",\"getComments\",\"getFirstToken\",\"getFirstTokens\",\"getJSDocComment\",\"getLastToken\",\"getLastTokens\",\"getNodeByRangeIndex\",\"getSource\",\"getSourceLines\",\"getTokenAfter\",\"getTokenBefore\",\"getTokenByRangeStart\",\"getTokens\",\"getTokensAfter\",\"getTokensBefore\",\"getTokensBetween\"];//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n/**\n * An error message description\n * @typedef {Object} MessageDescriptor\n * @property {string} nodeType The type of node.\n * @property {Location} loc The location of the problem.\n * @property {string} message The problem message.\n * @property {Object} [data] Optional data to use to fill in placeholders in the\n *      message.\n * @property {Function} fix The function to call that creates a fix command.\n *///------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n/**\n * Rule context class\n * Acts as an abstraction layer between rules and the main eslint object.\n */var RuleContext=function(){/**\n     * @param {string} ruleId The ID of the rule using this object.\n     * @param {eslint} eslint The eslint object.\n     * @param {number} severity The configured severity level of the rule.\n     * @param {Array} options The configuration information to be added to the rule.\n     * @param {Object} settings The configuration settings passed from the config file.\n     * @param {Object} parserOptions The parserOptions settings passed from the config file.\n     * @param {Object} parserPath The parser setting passed from the config file.\n     * @param {Object} meta The metadata of the rule\n     * @param {Object} parserServices The parser services for the rule.\n     */function RuleContext(ruleId,eslint,severity,options,settings,parserOptions,parserPath,meta,parserServices){_classCallCheck(this,RuleContext);// public.\nthis.id=ruleId;this.options=options;this.settings=settings;this.parserOptions=parserOptions;this.parserPath=parserPath;this.meta=meta;// create a separate copy and freeze it (it's not nice to freeze other people's objects)\nthis.parserServices=(0,_freeze2.default)((0,_assign4.default)({},parserServices));// private.\nthis.eslint=eslint;this.severity=severity;(0,_freeze2.default)(this);}/**\n     * Passthrough to eslint.getSourceCode().\n     * @returns {SourceCode} The SourceCode object for the code.\n     */_createClass(RuleContext,[{key:\"getSourceCode\",value:function getSourceCode(){return this.eslint.getSourceCode();}/**\n         * Passthrough to eslint.report() that automatically assigns the rule ID and severity.\n         * @param {ASTNode|MessageDescriptor} nodeOrDescriptor The AST node related to the message or a message\n         *      descriptor.\n         * @param {Object=} location The location of the error.\n         * @param {string} message The message to display to the user.\n         * @param {Object} opts Optional template data which produces a formatted message\n         *     with symbols being replaced by this object's values.\n         * @returns {void}\n         */},{key:\"report\",value:function report(nodeOrDescriptor,location,message,opts){// check to see if it's a new style call\nif(arguments.length===1){var descriptor=nodeOrDescriptor;var fix=null;// if there's a fix specified, get it\nif(typeof descriptor.fix===\"function\"){fix=descriptor.fix(ruleFixer);}this.eslint.report(this.id,this.severity,descriptor.node,descriptor.loc||descriptor.node.loc.start,descriptor.message,descriptor.data,fix,this.meta);return;}// old style call\nthis.eslint.report(this.id,this.severity,nodeOrDescriptor,location,message,opts,this.meta);}}]);return RuleContext;}();// Copy over passthrough methods. All functions will have 5 or fewer parameters.\nPASSTHROUGHS.forEach(function(name){this[name]=function(a,b,c,d,e){return this.eslint[name](a,b,c,d,e);};},RuleContext.prototype);module.exports=RuleContext;},{\"./util/rule-fixer\":883}],619:[function(require,module,exports){/**\n * @fileoverview Defines a storage for rules.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar loadRules=require(\"./load-rules\");//------------------------------------------------------------------------------\n// Privates\n//------------------------------------------------------------------------------\nvar rules=(0,_create4.default)(null);//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * Registers a rule module for rule id in storage.\n * @param {string} ruleId Rule id (file name).\n * @param {Function} ruleModule Rule handler.\n * @returns {void}\n */function define(ruleId,ruleModule){rules[ruleId]=ruleModule;}/**\n * Loads and registers all rules from passed rules directory.\n * @param {string} [rulesDir] Path to rules directory, may be relative. Defaults to `lib/rules`.\n * @param {string} cwd Current working directory\n * @returns {void}\n */function load(rulesDir,cwd){var newRules=loadRules(rulesDir,cwd);(0,_keys4.default)(newRules).forEach(function(ruleId){define(ruleId,newRules[ruleId]);});}/**\n * Registers all given rules of a plugin.\n * @param {Object} plugin The plugin object to import.\n * @param {string} pluginName The name of the plugin without prefix (`eslint-plugin-`).\n * @returns {void}\n */function importPlugin(plugin,pluginName){if(plugin.rules){(0,_keys4.default)(plugin.rules).forEach(function(ruleId){var qualifiedRuleId=pluginName+\"/\"+ruleId,rule=plugin.rules[ruleId];define(qualifiedRuleId,rule);});}}/**\n * Access rule handler by id (file name).\n * @param {string} ruleId Rule id (file name).\n * @returns {Function} Rule handler.\n */function getHandler(ruleId){if(typeof rules[ruleId]===\"string\"){return require(rules[ruleId]);}return rules[ruleId];}/**\n * Get an object with all currently loaded rules\n * @returns {Map} All loaded rules\n */function getAllLoadedRules(){var allRules=new _map4.default();(0,_keys4.default)(rules).forEach(function(name){var rule=getHandler(name);allRules.set(name,rule);});return allRules;}/**\n * Reset rules storage.\n * Should be used only in tests.\n * @returns {void}\n */function testClear(){rules=(0,_create4.default)(null);}module.exports={define:define,load:load,importPlugin:importPlugin,get:getHandler,getAllLoadedRules:getAllLoadedRules,testClear:testClear,/**\n     * Resets rules to its starting state. Use for tests only.\n     * @returns {void}\n     */testReset:function testReset(){testClear();load();}};//------------------------------------------------------------------------------\n// Initialization\n//------------------------------------------------------------------------------\n// loads built-in rules\nload();},{\"./load-rules\":617}],620:[function(require,module,exports){/**\n * @fileoverview Rule to flag wrapping non-iife in parens\n * @author Gyandeep Singh\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given node is an `Identifier` node which was named a given name.\n * @param {ASTNode} node - A node to check.\n * @param {string} name - An expected name of the node.\n * @returns {boolean} `true` if the node is an `Identifier` node which was named as expected.\n */function isIdentifier(node,name){return node.type===\"Identifier\"&&node.name===name;}/**\n * Checks whether or not a given node is an argument of a specified method call.\n * @param {ASTNode} node - A node to check.\n * @param {number} index - An expected index of the node in arguments.\n * @param {string} object - An expected name of the object of the method.\n * @param {string} property - An expected name of the method.\n * @returns {boolean} `true` if the node is an argument of the specified method call.\n */function isArgumentOfMethodCall(node,index,object,property){var parent=node.parent;return parent.type===\"CallExpression\"&&parent.callee.type===\"MemberExpression\"&&parent.callee.computed===false&&isIdentifier(parent.callee.object,object)&&isIdentifier(parent.callee.property,property)&&parent.arguments[index]===node;}/**\n * Checks whether or not a given node is a property descriptor.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node is a property descriptor.\n */function isPropertyDescriptor(node){// Object.defineProperty(obj, \"foo\", {set: ...})\nif(isArgumentOfMethodCall(node,2,\"Object\",\"defineProperty\")||isArgumentOfMethodCall(node,2,\"Reflect\",\"defineProperty\")){return true;}/*\n     * Object.defineProperties(obj, {foo: {set: ...}})\n     * Object.create(proto, {foo: {set: ...}})\n     */node=node.parent.parent;return node.type===\"ObjectExpression\"&&(isArgumentOfMethodCall(node,1,\"Object\",\"create\")||isArgumentOfMethodCall(node,1,\"Object\",\"defineProperties\"));}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce getter and setter pairs in objects\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{getWithoutSet:{type:\"boolean\"},setWithoutGet:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var config=context.options[0]||{};var checkGetWithoutSet=config.getWithoutSet===true;var checkSetWithoutGet=config.setWithoutGet!==false;/**\n         * Checks a object expression to see if it has setter and getter both present or none.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */function checkLonelySetGet(node){var isSetPresent=false;var isGetPresent=false;var isDescriptor=isPropertyDescriptor(node);for(var i=0,end=node.properties.length;i<end;i++){var property=node.properties[i];var propToCheck=\"\";if(property.kind===\"init\"){if(isDescriptor&&!property.computed){propToCheck=property.key.name;}}else{propToCheck=property.kind;}switch(propToCheck){case\"set\":isSetPresent=true;break;case\"get\":isGetPresent=true;break;default:// Do nothing\n}if(isSetPresent&&isGetPresent){break;}}if(checkSetWithoutGet&&isSetPresent&&!isGetPresent){context.report({node:node,message:\"Getter is not present.\"});}else if(checkGetWithoutSet&&isGetPresent&&!isSetPresent){context.report({node:node,message:\"Setter is not present.\"});}}return{ObjectExpression:function ObjectExpression(node){if(checkSetWithoutGet||checkGetWithoutSet){checkLonelySetGet(node);}}};}};},{}],621:[function(require,module,exports){/**\n * @fileoverview Disallows or enforces spaces inside of array brackets.\n * @author Jamund Ferguson\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing inside array brackets\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{singleValue:{type:\"boolean\"},objectsInArrays:{type:\"boolean\"},arraysInArrays:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var spaced=context.options[0]===\"always\",sourceCode=context.getSourceCode();/**\n         * Determines whether an option is set, relative to the spacing option.\n         * If spaced is \"always\", then check whether option is set to false.\n         * If spaced is \"never\", then check whether option is set to true.\n         * @param {Object} option - The option to exclude.\n         * @returns {boolean} Whether or not the property is excluded.\n         */function isOptionSet(option){return context.options[1]?context.options[1][option]===!spaced:false;}var options={spaced:spaced,singleElementException:isOptionSet(\"singleValue\"),objectsInArraysException:isOptionSet(\"objectsInArrays\"),arraysInArraysException:isOptionSet(\"arraysInArrays\")};//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n        * Reports that there shouldn't be a space after the first token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportNoBeginningSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"There should be no space after '{{tokenValue}}'.\",data:{tokenValue:token.value},fix:function fix(fixer){var nextToken=sourceCode.getTokenAfter(token);return fixer.removeRange([token.range[1],nextToken.range[0]]);}});}/**\n        * Reports that there shouldn't be a space before the last token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportNoEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"There should be no space before '{{tokenValue}}'.\",data:{tokenValue:token.value},fix:function fix(fixer){var previousToken=sourceCode.getTokenBefore(token);return fixer.removeRange([previousToken.range[1],token.range[0]]);}});}/**\n        * Reports that there should be a space after the first token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportRequiredBeginningSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"A space is required after '{{tokenValue}}'.\",data:{tokenValue:token.value},fix:function fix(fixer){return fixer.insertTextAfter(token,\" \");}});}/**\n        * Reports that there should be a space before the last token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportRequiredEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"A space is required before '{{tokenValue}}'.\",data:{tokenValue:token.value},fix:function fix(fixer){return fixer.insertTextBefore(token,\" \");}});}/**\n        * Determines if a node is an object type\n        * @param {ASTNode} node - The node to check.\n        * @returns {boolean} Whether or not the node is an object type.\n        */function isObjectType(node){return node&&(node.type===\"ObjectExpression\"||node.type===\"ObjectPattern\");}/**\n        * Determines if a node is an array type\n        * @param {ASTNode} node - The node to check.\n        * @returns {boolean} Whether or not the node is an array type.\n        */function isArrayType(node){return node&&(node.type===\"ArrayExpression\"||node.type===\"ArrayPattern\");}/**\n         * Validates the spacing around array brackets\n         * @param {ASTNode} node - The node we're checking for spacing\n         * @returns {void}\n         */function validateArraySpacing(node){if(options.spaced&&node.elements.length===0){return;}var first=sourceCode.getFirstToken(node),second=sourceCode.getFirstToken(node,1),last=node.typeAnnotation?sourceCode.getTokenBefore(node.typeAnnotation):sourceCode.getLastToken(node),penultimate=sourceCode.getTokenBefore(last),firstElement=node.elements[0],lastElement=node.elements[node.elements.length-1];var openingBracketMustBeSpaced=options.objectsInArraysException&&isObjectType(firstElement)||options.arraysInArraysException&&isArrayType(firstElement)||options.singleElementException&&node.elements.length===1?!options.spaced:options.spaced;var closingBracketMustBeSpaced=options.objectsInArraysException&&isObjectType(lastElement)||options.arraysInArraysException&&isArrayType(lastElement)||options.singleElementException&&node.elements.length===1?!options.spaced:options.spaced;if(astUtils.isTokenOnSameLine(first,second)){if(openingBracketMustBeSpaced&&!sourceCode.isSpaceBetweenTokens(first,second)){reportRequiredBeginningSpace(node,first);}if(!openingBracketMustBeSpaced&&sourceCode.isSpaceBetweenTokens(first,second)){reportNoBeginningSpace(node,first);}}if(first!==penultimate&&astUtils.isTokenOnSameLine(penultimate,last)){if(closingBracketMustBeSpaced&&!sourceCode.isSpaceBetweenTokens(penultimate,last)){reportRequiredEndingSpace(node,last);}if(!closingBracketMustBeSpaced&&sourceCode.isSpaceBetweenTokens(penultimate,last)){reportNoEndingSpace(node,last);}}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{ArrayPattern:validateArraySpacing,ArrayExpression:validateArraySpacing};}};},{\"../ast-utils\":605}],622:[function(require,module,exports){/**\n * @fileoverview Rule to enforce return statements in callbacks of array's methods\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar TARGET_NODE_TYPE=/^(?:Arrow)?FunctionExpression$/;var TARGET_METHODS=/^(?:every|filter|find(?:Index)?|map|reduce(?:Right)?|some|sort)$/;/**\n * Checks a given code path segment is reachable.\n *\n * @param {CodePathSegment} segment - A segment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */function isReachable(segment){return segment.reachable;}/**\n * Gets a readable location.\n *\n * - FunctionExpression -> the function name or `function` keyword.\n * - ArrowFunctionExpression -> `=>` token.\n *\n * @param {ASTNode} node - A function node to get.\n * @param {SourceCode} sourceCode - A source code to get tokens.\n * @returns {ASTNode|Token} The node or the token of a location.\n */function getLocation(node,sourceCode){if(node.type===\"ArrowFunctionExpression\"){return sourceCode.getTokenBefore(node.body);}return node.id||node;}/**\n * Checks a given node is a MemberExpression node which has the specified name's\n * property.\n *\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node is a MemberExpression node which has\n *      the specified name's property\n */function isTargetMethod(node){return node.type===\"MemberExpression\"&&TARGET_METHODS.test(astUtils.getStaticPropertyName(node)||\"\");}/**\n * Checks whether or not a given node is a function expression which is the\n * callback of an array method.\n *\n * @param {ASTNode} node - A node to check. This is one of\n *      FunctionExpression or ArrowFunctionExpression.\n * @returns {boolean} `true` if the node is the callback of an array method.\n */function isCallbackOfArrayMethod(node){while(node){var parent=node.parent;switch(parent.type){/*\n             * Looks up the destination. e.g.,\n             * foo.every(nativeFoo || function foo() { ... });\n             */case\"LogicalExpression\":case\"ConditionalExpression\":node=parent;break;// If the upper function is IIFE, checks the destination of the return value.\n// e.g.\n//   foo.every((function() {\n//     // setup...\n//     return function callback() { ... };\n//   })());\ncase\"ReturnStatement\":{var func=astUtils.getUpperFunction(parent);if(func===null||!astUtils.isCallee(func)){return false;}node=func.parent;break;}// e.g.\n//   Array.from([], function() {});\n//   list.every(function() {});\ncase\"CallExpression\":if(astUtils.isArrayFromMethod(parent.callee)){return parent.arguments.length>=2&&parent.arguments[1]===node;}if(isTargetMethod(parent.callee)){return parent.arguments.length>=1&&parent.arguments[0]===node;}return false;// Otherwise this node is not target.\ndefault:return false;}}/* istanbul ignore next: unreachable */return false;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce `return` statements in callbacks of array methods\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var funcInfo={upper:null,codePath:null,hasReturn:false,shouldCheck:false,node:null};/**\n         * Checks whether or not the last code path segment is reachable.\n         * Then reports this function if the segment is reachable.\n         *\n         * If the last code path segment is reachable, there are paths which are not\n         * returned or thrown.\n         *\n         * @param {ASTNode} node - A node to check.\n         * @returns {void}\n         */function checkLastSegment(node){if(funcInfo.shouldCheck&&funcInfo.codePath.currentSegments.some(isReachable)){context.report({node:node,loc:getLocation(node,context.getSourceCode()).loc.start,message:funcInfo.hasReturn?\"Expected to return a value at the end of {{name}}.\":\"Expected to return a value in {{name}}.\",data:{name:astUtils.getFunctionNameWithKind(funcInfo.node)}});}}return{// Stacks this function's information.\nonCodePathStart:function onCodePathStart(codePath,node){funcInfo={upper:funcInfo,codePath:codePath,hasReturn:false,shouldCheck:TARGET_NODE_TYPE.test(node.type)&&node.body.type===\"BlockStatement\"&&isCallbackOfArrayMethod(node)&&!node.async&&!node.generator,node:node};},// Pops this function's information.\nonCodePathEnd:function onCodePathEnd(){funcInfo=funcInfo.upper;},// Checks the return statement is valid.\nReturnStatement:function ReturnStatement(node){if(funcInfo.shouldCheck){funcInfo.hasReturn=true;if(!node.argument){context.report({node:node,message:\"{{name}} expected a return value.\",data:{name:lodash.upperFirst(astUtils.getFunctionNameWithKind(funcInfo.node))}});}}},// Reports a given function if the last path is reachable.\n\"FunctionExpression:exit\":checkLastSegment,\"ArrowFunctionExpression:exit\":checkLastSegment};}};},{\"../ast-utils\":605,\"lodash\":566}],623:[function(require,module,exports){/**\n * @fileoverview Rule to require braces in arrow function body.\n * @author Alberto Rodríguez\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require braces around arrow function bodies\",category:\"ECMAScript 6\",recommended:false},schema:{anyOf:[{type:\"array\",items:[{enum:[\"always\",\"never\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"as-needed\"]},{type:\"object\",properties:{requireReturnForObjectLiteral:{type:\"boolean\"}},additionalProperties:false}],minItems:0,maxItems:2}]},fixable:\"code\"},create:function create(context){var options=context.options;var always=options[0]===\"always\";var asNeeded=!options[0]||options[0]===\"as-needed\";var never=options[0]===\"never\";var requireReturnForObjectLiteral=options[1]&&options[1].requireReturnForObjectLiteral;var sourceCode=context.getSourceCode();/**\n         * Determines whether a arrow function body needs braces\n         * @param {ASTNode} node The arrow function node.\n         * @returns {void}\n         */function validate(node){var arrowBody=node.body;if(arrowBody.type===\"BlockStatement\"){var blockBody=arrowBody.body;if(blockBody.length!==1&&!never){return;}if(asNeeded&&requireReturnForObjectLiteral&&blockBody[0].type===\"ReturnStatement\"&&blockBody[0].argument&&blockBody[0].argument.type===\"ObjectExpression\"){return;}if(never||asNeeded&&blockBody[0].type===\"ReturnStatement\"){context.report({node:node,loc:arrowBody.loc.start,message:\"Unexpected block statement surrounding arrow body.\",fix:function fix(fixer){if(blockBody.length!==1||blockBody[0].type!==\"ReturnStatement\"||!blockBody[0].argument){return null;}var sourceText=sourceCode.getText();var returnKeyword=sourceCode.getFirstToken(blockBody[0]);var firstValueToken=sourceCode.getTokenAfter(returnKeyword);var lastValueToken=sourceCode.getLastToken(blockBody[0]);if(astUtils.isSemicolonToken(lastValueToken)){/* The last token of the returned value is the last token of the ReturnExpression (if\n                                 * the ReturnExpression has no semicolon), or the second-to-last token (if the ReturnExpression\n                                 * has a semicolon).\n                                 */lastValueToken=sourceCode.getTokenBefore(lastValueToken);}var tokenAfterArrowBody=sourceCode.getTokenAfter(arrowBody);if(tokenAfterArrowBody&&tokenAfterArrowBody.type===\"Punctuator\"&&/^[([/`+-]/.test(tokenAfterArrowBody.value)){// Don't do a fix if the next token would cause ASI issues when preceded by the returned value.\nreturn null;}var textBeforeReturn=sourceText.slice(arrowBody.range[0]+1,returnKeyword.range[0]);var textBetweenReturnAndValue=sourceText.slice(returnKeyword.range[1],firstValueToken.range[0]);var rawReturnValueText=sourceText.slice(firstValueToken.range[0],lastValueToken.range[1]);var returnValueText=astUtils.isOpeningBraceToken(firstValueToken)?\"(\"+rawReturnValueText+\")\":rawReturnValueText;var textAfterValue=sourceText.slice(lastValueToken.range[1],blockBody[0].range[1]-1);var textAfterReturnStatement=sourceText.slice(blockBody[0].range[1],arrowBody.range[1]-1);/*\n                             * For fixes that only contain spaces around the return value, remove the extra spaces.\n                             * This avoids ugly fixes that end up with extra spaces after the arrow, e.g. `() =>   0 ;`\n                             */return fixer.replaceText(arrowBody,(textBeforeReturn+textBetweenReturnAndValue).replace(/^\\s*$/,\"\")+returnValueText+(textAfterValue+textAfterReturnStatement).replace(/^\\s*$/,\"\"));}});}}else{if(always||asNeeded&&requireReturnForObjectLiteral&&arrowBody.type===\"ObjectExpression\"){context.report({node:node,loc:arrowBody.loc.start,message:\"Expected block statement surrounding arrow body.\",fix:function fix(fixer){var lastTokenBeforeBody=sourceCode.getLastTokenBetween(sourceCode.getFirstToken(node),arrowBody,astUtils.isNotOpeningParenToken);var firstBodyToken=sourceCode.getTokenAfter(lastTokenBeforeBody);return fixer.replaceTextRange([firstBodyToken.range[0],node.range[1]],\"{return \"+sourceCode.getText().slice(firstBodyToken.range[0],node.range[1])+\"}\");}});}}}return{ArrowFunctionExpression:validate};}};},{\"../ast-utils\":605}],624:[function(require,module,exports){/**\n * @fileoverview Rule to require parens in arrow function arguments.\n * @author Jxck\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require parentheses around arrow function arguments\",category:\"ECMAScript 6\",recommended:false},fixable:\"code\",schema:[{enum:[\"always\",\"as-needed\"]},{type:\"object\",properties:{requireForBlockBody:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var message=\"Expected parentheses around arrow function argument.\";var asNeededMessage=\"Unexpected parentheses around single function argument.\";var asNeeded=context.options[0]===\"as-needed\";var requireForBlockBodyMessage=\"Unexpected parentheses around single function argument having a body with no curly braces\";var requireForBlockBodyNoParensMessage=\"Expected parentheses around arrow function argument having a body with curly braces.\";var requireForBlockBody=asNeeded&&context.options[1]&&context.options[1].requireForBlockBody===true;var sourceCode=context.getSourceCode();/**\n         * Determines whether a arrow function argument end with `)`\n         * @param {ASTNode} node The arrow function node.\n         * @returns {void}\n         */function parens(node){var token=sourceCode.getFirstToken(node,node.async?1:0);// \"as-needed\", { \"requireForBlockBody\": true }: x => x\nif(requireForBlockBody&&node.params.length===1&&node.params[0].type===\"Identifier\"&&!node.params[0].typeAnnotation&&node.body.type!==\"BlockStatement\"&&!node.returnType){if(astUtils.isOpeningParenToken(token)){context.report({node:node,message:requireForBlockBodyMessage,fix:function fix(fixer){var paramToken=context.getTokenAfter(token);var closingParenToken=context.getTokenAfter(paramToken);return fixer.replaceTextRange([token.range[0],closingParenToken.range[1]],paramToken.value);}});}return;}if(requireForBlockBody&&node.body.type===\"BlockStatement\"){if(!astUtils.isOpeningParenToken(token)){context.report({node:node,message:requireForBlockBodyNoParensMessage,fix:function fix(fixer){return fixer.replaceText(token,\"(\"+token.value+\")\");}});}return;}// \"as-needed\": x => x\nif(asNeeded&&node.params.length===1&&node.params[0].type===\"Identifier\"&&!node.params[0].typeAnnotation&&!node.returnType){if(astUtils.isOpeningParenToken(token)){context.report({node:node,message:asNeededMessage,fix:function fix(fixer){var paramToken=context.getTokenAfter(token);var closingParenToken=context.getTokenAfter(paramToken);return fixer.replaceTextRange([token.range[0],closingParenToken.range[1]],paramToken.value);}});}return;}if(token.type===\"Identifier\"){var after=sourceCode.getTokenAfter(token);// (x) => x\nif(after.value!==\")\"){context.report({node:node,message:message,fix:function fix(fixer){return fixer.replaceText(token,\"(\"+token.value+\")\");}});}}}return{ArrowFunctionExpression:parens};}};},{\"../ast-utils\":605}],625:[function(require,module,exports){/**\n * @fileoverview Rule to define spacing before/after arrow function's arrow.\n * @author Jxck\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing before and after the arrow in arrow functions\",category:\"ECMAScript 6\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{before:{type:\"boolean\"},after:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){// merge rules with default\nvar rule={before:true,after:true},option=context.options[0]||{};rule.before=option.before!==false;rule.after=option.after!==false;var sourceCode=context.getSourceCode();/**\n         * Get tokens of arrow(`=>`) and before/after arrow.\n         * @param {ASTNode} node The arrow function node.\n         * @returns {Object} Tokens of arrow and before/after arrow.\n         */function getTokens(node){var arrow=sourceCode.getTokenBefore(node.body,astUtils.isArrowToken);return{before:sourceCode.getTokenBefore(arrow),arrow:arrow,after:sourceCode.getTokenAfter(arrow)};}/**\n         * Count spaces before/after arrow(`=>`) token.\n         * @param {Object} tokens Tokens before/after arrow.\n         * @returns {Object} count of space before/after arrow.\n         */function countSpaces(tokens){var before=tokens.arrow.range[0]-tokens.before.range[1];var after=tokens.after.range[0]-tokens.arrow.range[1];return{before:before,after:after};}/**\n         * Determines whether space(s) before after arrow(`=>`) is satisfy rule.\n         * if before/after value is `true`, there should be space(s).\n         * if before/after value is `false`, there should be no space.\n         * @param {ASTNode} node The arrow function node.\n         * @returns {void}\n         */function spaces(node){var tokens=getTokens(node);var countSpace=countSpaces(tokens);if(rule.before){// should be space(s) before arrow\nif(countSpace.before===0){context.report({node:tokens.before,message:\"Missing space before =>.\",fix:function fix(fixer){return fixer.insertTextBefore(tokens.arrow,\" \");}});}}else{// should be no space before arrow\nif(countSpace.before>0){context.report({node:tokens.before,message:\"Unexpected space before =>.\",fix:function fix(fixer){return fixer.removeRange([tokens.before.range[1],tokens.arrow.range[0]]);}});}}if(rule.after){// should be space(s) after arrow\nif(countSpace.after===0){context.report({node:tokens.after,message:\"Missing space after =>.\",fix:function fix(fixer){return fixer.insertTextAfter(tokens.arrow,\" \");}});}}else{// should be no space after arrow\nif(countSpace.after>0){context.report({node:tokens.after,message:\"Unexpected space after =>.\",fix:function fix(fixer){return fixer.removeRange([tokens.arrow.range[1],tokens.after.range[0]]);}});}}}return{ArrowFunctionExpression:spaces};}};},{\"../ast-utils\":605}],626:[function(require,module,exports){/**\n * @fileoverview Rule to check for \"block scoped\" variables by binding context\n * @author Matt DuVall <http://www.mattduvall.com>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce the use of variables within the scope they are defined\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var stack=[];/**\n         * Makes a block scope.\n         * @param {ASTNode} node - A node of a scope.\n         * @returns {void}\n         */function enterScope(node){stack.push(node.range);}/**\n         * Pops the last block scope.\n         * @returns {void}\n         */function exitScope(){stack.pop();}/**\n         * Reports a given reference.\n         * @param {escope.Reference} reference - A reference to report.\n         * @returns {void}\n         */function report(reference){var identifier=reference.identifier;context.report({node:identifier,message:\"'{{name}}' used outside of binding context.\",data:{name:identifier.name}});}/**\n         * Finds and reports references which are outside of valid scopes.\n         * @param {ASTNode} node - A node to get variables.\n         * @returns {void}\n         */function checkForVariables(node){if(node.kind!==\"var\"){return;}// Defines a predicate to check whether or not a given reference is outside of valid scope.\nvar scopeRange=stack[stack.length-1];/**\n             * Check if a reference is out of scope\n             * @param {ASTNode} reference node to examine\n             * @returns {boolean} True is its outside the scope\n             * @private\n             */function isOutsideOfScope(reference){var idRange=reference.identifier.range;return idRange[0]<scopeRange[0]||idRange[1]>scopeRange[1];}// Gets declared variables, and checks its references.\nvar variables=context.getDeclaredVariables(node);for(var i=0;i<variables.length;++i){// Reports.\nvariables[i].references.filter(isOutsideOfScope).forEach(report);}}return{Program:function Program(node){stack=[node.range];},// Manages scopes.\nBlockStatement:enterScope,\"BlockStatement:exit\":exitScope,ForStatement:enterScope,\"ForStatement:exit\":exitScope,ForInStatement:enterScope,\"ForInStatement:exit\":exitScope,ForOfStatement:enterScope,\"ForOfStatement:exit\":exitScope,SwitchStatement:enterScope,\"SwitchStatement:exit\":exitScope,CatchClause:enterScope,\"CatchClause:exit\":exitScope,// Finds and reports references which are outside of valid scope.\nVariableDeclaration:checkForVariables};}};},{}],627:[function(require,module,exports){/**\n * @fileoverview A rule to disallow or enforce spaces inside of single line blocks.\n * @author Toru Nagashima\n */\"use strict\";var util=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing inside single-line blocks\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]}]},create:function create(context){var always=context.options[0]!==\"never\",message=always?\"Requires a space\":\"Unexpected space(s)\",sourceCode=context.getSourceCode();/**\n         * Gets the open brace token from a given node.\n         * @param {ASTNode} node - A BlockStatement/SwitchStatement node to get.\n         * @returns {Token} The token of the open brace.\n         */function getOpenBrace(node){if(node.type===\"SwitchStatement\"){if(node.cases.length>0){return sourceCode.getTokenBefore(node.cases[0]);}return sourceCode.getLastToken(node,1);}return sourceCode.getFirstToken(node);}/**\n         * Checks whether or not:\n         *   - given tokens are on same line.\n         *   - there is/isn't a space between given tokens.\n         * @param {Token} left - A token to check.\n         * @param {Token} right - The token which is next to `left`.\n         * @returns {boolean}\n         *    When the option is `\"always\"`, `true` if there are one or more spaces between given tokens.\n         *    When the option is `\"never\"`, `true` if there are not any spaces between given tokens.\n         *    If given tokens are not on same line, it's always `true`.\n         */function isValid(left,right){return!util.isTokenOnSameLine(left,right)||sourceCode.isSpaceBetweenTokens(left,right)===always;}/**\n         * Reports invalid spacing style inside braces.\n         * @param {ASTNode} node - A BlockStatement/SwitchStatement node to get.\n         * @returns {void}\n         */function checkSpacingInsideBraces(node){// Gets braces and the first/last token of content.\nvar openBrace=getOpenBrace(node);var closeBrace=sourceCode.getLastToken(node);var firstToken=sourceCode.getTokenAfter(openBrace,{includeComments:true});var lastToken=sourceCode.getTokenBefore(closeBrace,{includeComments:true});// Skip if the node is invalid or empty.\nif(openBrace.type!==\"Punctuator\"||openBrace.value!==\"{\"||closeBrace.type!==\"Punctuator\"||closeBrace.value!==\"}\"||firstToken===closeBrace){return;}// Skip line comments for option never\nif(!always&&firstToken.type===\"Line\"){return;}// Check.\nif(!isValid(openBrace,firstToken)){context.report({node:node,loc:openBrace.loc.start,message:\"{{message}} after '{'.\",data:{message:message},fix:function fix(fixer){if(always){return fixer.insertTextBefore(firstToken,\" \");}return fixer.removeRange([openBrace.range[1],firstToken.range[0]]);}});}if(!isValid(lastToken,closeBrace)){context.report({node:node,loc:closeBrace.loc.start,message:\"{{message}} before '}'.\",data:{message:message},fix:function fix(fixer){if(always){return fixer.insertTextAfter(lastToken,\" \");}return fixer.removeRange([lastToken.range[1],closeBrace.range[0]]);}});}}return{BlockStatement:checkSpacingInsideBraces,SwitchStatement:checkSpacingInsideBraces};}};},{\"../ast-utils\":605}],628:[function(require,module,exports){/**\n * @fileoverview Rule to flag block statements that do not use the one true brace style\n * @author Ian Christian Myers\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent brace style for blocks\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"1tbs\",\"stroustrup\",\"allman\"]},{type:\"object\",properties:{allowSingleLine:{type:\"boolean\"}},additionalProperties:false}],fixable:\"whitespace\"},create:function create(context){var style=context.options[0]||\"1tbs\",params=context.options[1]||{},sourceCode=context.getSourceCode();var OPEN_MESSAGE=\"Opening curly brace does not appear on the same line as controlling statement.\",OPEN_MESSAGE_ALLMAN=\"Opening curly brace appears on the same line as controlling statement.\",BODY_MESSAGE=\"Statement inside of curly braces should be on next line.\",CLOSE_MESSAGE=\"Closing curly brace does not appear on the same line as the subsequent block.\",CLOSE_MESSAGE_SINGLE=\"Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.\",CLOSE_MESSAGE_STROUSTRUP_ALLMAN=\"Closing curly brace appears on the same line as the subsequent block.\";//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n        * Fixes a place where a newline unexpectedly appears\n        * @param {Token} firstToken The token before the unexpected newline\n        * @param {Token} secondToken The token after the unexpected newline\n        * @returns {Function} A fixer function to remove the newlines between the tokens\n        */function removeNewlineBetween(firstToken,secondToken){var textRange=[firstToken.range[1],secondToken.range[0]];var textBetween=sourceCode.text.slice(textRange[0],textRange[1]);var NEWLINE_REGEX=astUtils.createGlobalLinebreakMatcher();// Don't do a fix if there is a comment between the tokens\nreturn function(fixer){return fixer.replaceTextRange(textRange,textBetween.trim()?null:textBetween.replace(NEWLINE_REGEX,\"\"));};}/**\n        * Validates a pair of curly brackets based on the user's config\n        * @param {Token} openingCurly The opening curly bracket\n        * @param {Token} closingCurly The closing curly bracket\n        * @returns {void}\n        */function validateCurlyPair(openingCurly,closingCurly){var tokenBeforeOpeningCurly=sourceCode.getTokenBefore(openingCurly);var tokenAfterOpeningCurly=sourceCode.getTokenAfter(openingCurly);var tokenBeforeClosingCurly=sourceCode.getTokenBefore(closingCurly);var singleLineException=params.allowSingleLine&&astUtils.isTokenOnSameLine(openingCurly,closingCurly);if(style!==\"allman\"&&!astUtils.isTokenOnSameLine(tokenBeforeOpeningCurly,openingCurly)){context.report({node:openingCurly,message:OPEN_MESSAGE,fix:removeNewlineBetween(tokenBeforeOpeningCurly,openingCurly)});}if(style===\"allman\"&&astUtils.isTokenOnSameLine(tokenBeforeOpeningCurly,openingCurly)&&!singleLineException){context.report({node:openingCurly,message:OPEN_MESSAGE_ALLMAN,fix:function fix(fixer){return fixer.insertTextBefore(openingCurly,\"\\n\");}});}if(astUtils.isTokenOnSameLine(openingCurly,tokenAfterOpeningCurly)&&tokenAfterOpeningCurly!==closingCurly&&!singleLineException){context.report({node:openingCurly,message:BODY_MESSAGE,fix:function fix(fixer){return fixer.insertTextAfter(openingCurly,\"\\n\");}});}if(tokenBeforeClosingCurly!==openingCurly&&!singleLineException&&astUtils.isTokenOnSameLine(tokenBeforeClosingCurly,closingCurly)){context.report({node:closingCurly,message:CLOSE_MESSAGE_SINGLE,fix:function fix(fixer){return fixer.insertTextBefore(closingCurly,\"\\n\");}});}}/**\n        * Validates the location of a token that appears before a keyword (e.g. a newline before `else`)\n        * @param {Token} curlyToken The closing curly token. This is assumed to precede a keyword token (such as `else` or `finally`).\n        * @returns {void}\n        */function validateCurlyBeforeKeyword(curlyToken){var keywordToken=sourceCode.getTokenAfter(curlyToken);if(style===\"1tbs\"&&!astUtils.isTokenOnSameLine(curlyToken,keywordToken)){context.report({node:curlyToken,message:CLOSE_MESSAGE,fix:removeNewlineBetween(curlyToken,keywordToken)});}if(style!==\"1tbs\"&&astUtils.isTokenOnSameLine(curlyToken,keywordToken)){context.report({node:curlyToken,message:CLOSE_MESSAGE_STROUSTRUP_ALLMAN,fix:function fix(fixer){return fixer.insertTextAfter(curlyToken,\"\\n\");}});}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{BlockStatement:function BlockStatement(node){if(!astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)){validateCurlyPair(sourceCode.getFirstToken(node),sourceCode.getLastToken(node));}},ClassBody:function ClassBody(node){validateCurlyPair(sourceCode.getFirstToken(node),sourceCode.getLastToken(node));},SwitchStatement:function SwitchStatement(node){var closingCurly=sourceCode.getLastToken(node);var openingCurly=sourceCode.getTokenBefore(node.cases.length?node.cases[0]:closingCurly);validateCurlyPair(openingCurly,closingCurly);},IfStatement:function IfStatement(node){if(node.consequent.type===\"BlockStatement\"&&node.alternate){// Handle the keyword after the `if` block (before `else`)\nvalidateCurlyBeforeKeyword(sourceCode.getLastToken(node.consequent));}},TryStatement:function TryStatement(node){// Handle the keyword after the `try` block (before `catch` or `finally`)\nvalidateCurlyBeforeKeyword(sourceCode.getLastToken(node.block));if(node.handler&&node.finalizer){// Handle the keyword after the `catch` block (before `finally`)\nvalidateCurlyBeforeKeyword(sourceCode.getLastToken(node.handler.body));}}};}};},{\"../ast-utils\":605}],629:[function(require,module,exports){/**\n * @fileoverview Enforce return after a callback.\n * @author Jamund Ferguson\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `return` statements after callbacks\",category:\"Node.js and CommonJS\",recommended:false},schema:[{type:\"array\",items:{type:\"string\"}}]},create:function create(context){var callbacks=context.options[0]||[\"callback\",\"cb\",\"next\"],sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Find the closest parent matching a list of types.\n         * @param {ASTNode} node The node whose parents we are searching\n         * @param {Array} types The node types to match\n         * @returns {ASTNode} The matched node or undefined.\n         */function findClosestParentOfType(node,types){if(!node.parent){return null;}if(types.indexOf(node.parent.type)===-1){return findClosestParentOfType(node.parent,types);}return node.parent;}/**\n         * Check to see if a node contains only identifers\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} Whether or not the node contains only identifers\n         */function containsOnlyIdentifiers(node){if(node.type===\"Identifier\"){return true;}if(node.type===\"MemberExpression\"){if(node.object.type===\"Identifier\"){return true;}else if(node.object.type===\"MemberExpression\"){return containsOnlyIdentifiers(node.object);}}return false;}/**\n         * Check to see if a CallExpression is in our callback list.\n         * @param {ASTNode} node The node to check against our callback names list.\n         * @returns {boolean} Whether or not this function matches our callback name.\n         */function isCallback(node){return containsOnlyIdentifiers(node.callee)&&callbacks.indexOf(sourceCode.getText(node.callee))>-1;}/**\n         * Determines whether or not the callback is part of a callback expression.\n         * @param {ASTNode} node The callback node\n         * @param {ASTNode} parentNode The expression node\n         * @returns {boolean} Whether or not this is part of a callback expression\n         */function isCallbackExpression(node,parentNode){// ensure the parent node exists and is an expression\nif(!parentNode||parentNode.type!==\"ExpressionStatement\"){return false;}// cb()\nif(parentNode.expression===node){return true;}// special case for cb && cb() and similar\nif(parentNode.expression.type===\"BinaryExpression\"||parentNode.expression.type===\"LogicalExpression\"){if(parentNode.expression.right===node){return true;}}return false;}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){// if we're not a callback we can return\nif(!isCallback(node)){return;}// find the closest block, return or loop\nvar closestBlock=findClosestParentOfType(node,[\"BlockStatement\",\"ReturnStatement\",\"ArrowFunctionExpression\"])||{};// if our parent is a return we know we're ok\nif(closestBlock.type===\"ReturnStatement\"){return;}// arrow functions don't always have blocks and implicitly return\nif(closestBlock.type===\"ArrowFunctionExpression\"){return;}// block statements are part of functions and most if statements\nif(closestBlock.type===\"BlockStatement\"){// find the last item in the block\nvar lastItem=closestBlock.body[closestBlock.body.length-1];// if the callback is the last thing in a block that might be ok\nif(isCallbackExpression(node,lastItem)){var parentType=closestBlock.parent.type;// but only if the block is part of a function\nif(parentType===\"FunctionExpression\"||parentType===\"FunctionDeclaration\"||parentType===\"ArrowFunctionExpression\"){return;}}// ending a block with a return is also ok\nif(lastItem.type===\"ReturnStatement\"){// but only if the callback is immediately before\nif(isCallbackExpression(node,closestBlock.body[closestBlock.body.length-2])){return;}}}// as long as you're the child of a function at this point you should be asked to return\nif(findClosestParentOfType(node,[\"FunctionDeclaration\",\"FunctionExpression\",\"ArrowFunctionExpression\"])){context.report({node:node,message:\"Expected return with your callback function.\"});}}};}};},{}],630:[function(require,module,exports){/**\n * @fileoverview Rule to flag non-camelcased identifiers\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce camelcase naming convention\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{properties:{enum:[\"always\",\"never\"]}},additionalProperties:false}]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n// contains reported nodes to avoid reporting twice on destructuring with shorthand notation\nvar reported=[];var ALLOWED_PARENT_TYPES=new _set3.default([\"CallExpression\",\"NewExpression\"]);/**\n         * Checks if a string contains an underscore and isn't all upper-case\n         * @param {string} name The string to check.\n         * @returns {boolean} if the string is underscored\n         * @private\n         */function isUnderscored(name){// if there's an underscore, it might be A_CONSTANT, which is okay\nreturn name.indexOf(\"_\")>-1&&name!==name.toUpperCase();}/**\n         * Reports an AST node as a rule violation.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         * @private\n         */function report(node){if(reported.indexOf(node)<0){reported.push(node);context.report({node:node,message:\"Identifier '{{name}}' is not in camel case.\",data:{name:node.name}});}}var options=context.options[0]||{};var properties=options.properties||\"\";if(properties!==\"always\"&&properties!==\"never\"){properties=\"always\";}return{Identifier:function Identifier(node){/*\n                 * Leading and trailing underscores are commonly used to flag\n                 * private/protected identifiers, strip them\n                 */var name=node.name.replace(/^_+|_+$/g,\"\"),effectiveParent=node.parent.type===\"MemberExpression\"?node.parent.parent:node.parent;// MemberExpressions get special rules\nif(node.parent.type===\"MemberExpression\"){// \"never\" check properties\nif(properties===\"never\"){return;}// Always report underscored object names\nif(node.parent.object.type===\"Identifier\"&&node.parent.object.name===node.name&&isUnderscored(name)){report(node);// Report AssignmentExpressions only if they are the left side of the assignment\n}else if(effectiveParent.type===\"AssignmentExpression\"&&isUnderscored(name)&&(effectiveParent.right.type!==\"MemberExpression\"||effectiveParent.left.type===\"MemberExpression\"&&effectiveParent.left.property.name===node.name)){report(node);}// Properties have their own rules\n}else if(node.parent.type===\"Property\"){// \"never\" check properties\nif(properties===\"never\"){return;}if(node.parent.parent&&node.parent.parent.type===\"ObjectPattern\"&&node.parent.key===node&&node.parent.value!==node){return;}if(isUnderscored(name)&&!ALLOWED_PARENT_TYPES.has(effectiveParent.type)){report(node);}// Check if it's an import specifier\n}else if([\"ImportSpecifier\",\"ImportNamespaceSpecifier\",\"ImportDefaultSpecifier\"].indexOf(node.parent.type)>=0){// Report only if the local imported identifier is underscored\nif(node.parent.local&&node.parent.local.name===node.name&&isUnderscored(name)){report(node);}// Report anything that is underscored that isn't a CallExpression\n}else if(isUnderscored(name)&&!ALLOWED_PARENT_TYPES.has(effectiveParent.type)){report(node);}}};}};},{}],631:[function(require,module,exports){/**\n * @fileoverview enforce or disallow capitalization of the first letter of a comment\n * @author Kevin Partington\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar LETTER_PATTERN=require(\"../util/patterns/letters\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar ALWAYS_MESSAGE=\"Comments should not begin with a lowercase character\",NEVER_MESSAGE=\"Comments should not begin with an uppercase character\",DEFAULT_IGNORE_PATTERN=astUtils.COMMENTS_IGNORE_PATTERN,WHITESPACE=/\\s/g,MAYBE_URL=/^\\s*[^:/?#\\s]+:\\/\\/[^?#]/,// TODO: Combine w/ max-len pattern?\nDEFAULTS={ignorePattern:null,ignoreInlineComments:false,ignoreConsecutiveComments:false};/*\n * Base schema body for defining the basic capitalization rule, ignorePattern,\n * and ignoreInlineComments values.\n * This can be used in a few different ways in the actual schema.\n */var SCHEMA_BODY={type:\"object\",properties:{ignorePattern:{type:\"string\"},ignoreInlineComments:{type:\"boolean\"},ignoreConsecutiveComments:{type:\"boolean\"}},additionalProperties:false};/**\n * Get normalized options for either block or line comments from the given\n * user-provided options.\n * - If the user-provided options is just a string, returns a normalized\n *   set of options using default values for all other options.\n * - If the user-provided options is an object, then a normalized option\n *   set is returned. Options specified in overrides will take priority\n *   over options specified in the main options object, which will in\n *   turn take priority over the rule's defaults.\n *\n * @param {Object|string} rawOptions The user-provided options.\n * @param {string} which Either \"line\" or \"block\".\n * @returns {Object} The normalized options.\n */function getNormalizedOptions(rawOptions,which){if(!rawOptions){return(0,_assign4.default)({},DEFAULTS);}return(0,_assign4.default)({},DEFAULTS,rawOptions[which]||rawOptions);}/**\n * Get normalized options for block and line comments.\n *\n * @param {Object|string} rawOptions The user-provided options.\n * @returns {Object} An object with \"Line\" and \"Block\" keys and corresponding\n * normalized options objects.\n */function getAllNormalizedOptions(rawOptions){return{Line:getNormalizedOptions(rawOptions,\"line\"),Block:getNormalizedOptions(rawOptions,\"block\")};}/**\n * Creates a regular expression for each ignorePattern defined in the rule\n * options.\n *\n * This is done in order to avoid invoking the RegExp constructor repeatedly.\n *\n * @param {Object} normalizedOptions The normalized rule options.\n * @returns {void}\n */function createRegExpForIgnorePatterns(normalizedOptions){(0,_keys4.default)(normalizedOptions).forEach(function(key){var ignorePatternStr=normalizedOptions[key].ignorePattern;if(ignorePatternStr){var regExp=RegExp(\"^\\\\s*(?:\"+ignorePatternStr+\")\");normalizedOptions[key].ignorePatternRegExp=regExp;}});}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce or disallow capitalization of the first letter of a comment\",category:\"Stylistic Issues\",recommended:false},fixable:\"code\",schema:[{enum:[\"always\",\"never\"]},{oneOf:[SCHEMA_BODY,{type:\"object\",properties:{line:SCHEMA_BODY,block:SCHEMA_BODY},additionalProperties:false}]}]},create:function create(context){var capitalize=context.options[0]||\"always\",normalizedOptions=getAllNormalizedOptions(context.options[1]),sourceCode=context.getSourceCode();createRegExpForIgnorePatterns(normalizedOptions);//----------------------------------------------------------------------\n// Helpers\n//----------------------------------------------------------------------\n/**\n         * Checks whether a comment is an inline comment.\n         *\n         * For the purpose of this rule, a comment is inline if:\n         * 1. The comment is preceded by a token on the same line; and\n         * 2. The command is followed by a token on the same line.\n         *\n         * Note that the comment itself need not be single-line!\n         *\n         * Also, it follows from this definition that only block comments can\n         * be considered as possibly inline. This is because line comments\n         * would consume any following tokens on the same line as the comment.\n         *\n         * @param {ASTNode} comment The comment node to check.\n         * @returns {boolean} True if the comment is an inline comment, false\n         * otherwise.\n         */function isInlineComment(comment){var previousToken=sourceCode.getTokenBefore(comment,{includeComments:true}),nextToken=sourceCode.getTokenAfter(comment,{includeComments:true});return Boolean(previousToken&&nextToken&&comment.loc.start.line===previousToken.loc.end.line&&comment.loc.end.line===nextToken.loc.start.line);}/**\n         * Determine if a comment follows another comment.\n         *\n         * @param {ASTNode} comment The comment to check.\n         * @returns {boolean} True if the comment follows a valid comment.\n         */function isConsecutiveComment(comment){var previousTokenOrComment=sourceCode.getTokenBefore(comment,{includeComments:true});return Boolean(previousTokenOrComment&&[\"Block\",\"Line\"].indexOf(previousTokenOrComment.type)!==-1);}/**\n         * Check a comment to determine if it is valid for this rule.\n         *\n         * @param {ASTNode} comment The comment node to process.\n         * @param {Object} options The options for checking this comment.\n         * @returns {boolean} True if the comment is valid, false otherwise.\n         */function isCommentValid(comment,options){// 1. Check for default ignore pattern.\nif(DEFAULT_IGNORE_PATTERN.test(comment.value)){return true;}// 2. Check for custom ignore pattern.\nvar commentWithoutAsterisks=comment.value.replace(/\\*/g,\"\");if(options.ignorePatternRegExp&&options.ignorePatternRegExp.test(commentWithoutAsterisks)){return true;}// 3. Check for inline comments.\nif(options.ignoreInlineComments&&isInlineComment(comment)){return true;}// 4. Is this a consecutive comment (and are we tolerating those)?\nif(options.ignoreConsecutiveComments&&isConsecutiveComment(comment)){return true;}// 5. Does the comment start with a possible URL?\nif(MAYBE_URL.test(commentWithoutAsterisks)){return true;}// 6. Is the initial word character a letter?\nvar commentWordCharsOnly=commentWithoutAsterisks.replace(WHITESPACE,\"\");if(commentWordCharsOnly.length===0){return true;}var firstWordChar=commentWordCharsOnly[0];if(!LETTER_PATTERN.test(firstWordChar)){return true;}// 7. Check the case of the initial word character.\nvar isUppercase=firstWordChar!==firstWordChar.toLocaleLowerCase(),isLowercase=firstWordChar!==firstWordChar.toLocaleUpperCase();if(capitalize===\"always\"&&isLowercase){return false;}else if(capitalize===\"never\"&&isUppercase){return false;}return true;}/**\n         * Process a comment to determine if it needs to be reported.\n         *\n         * @param {ASTNode} comment The comment node to process.\n         * @returns {void}\n         */function processComment(comment){var options=normalizedOptions[comment.type],commentValid=isCommentValid(comment,options);if(!commentValid){var message=capitalize===\"always\"?ALWAYS_MESSAGE:NEVER_MESSAGE;context.report({node:null,// Intentionally using loc instead\nloc:comment.loc,message:message,fix:function fix(fixer){var match=comment.value.match(LETTER_PATTERN);return fixer.replaceTextRange(// Offset match.index by 2 to account for the first 2 characters that start the comment (// or /*)\n[comment.range[0]+match.index+2,comment.range[0]+match.index+3],capitalize===\"always\"?match[0].toLocaleUpperCase():match[0].toLocaleLowerCase());}});}}//----------------------------------------------------------------------\n// Public\n//----------------------------------------------------------------------\nreturn{Program:function Program(){var comments=sourceCode.getAllComments();comments.forEach(processComment);}};}};},{\"../ast-utils\":605,\"../util/patterns/letters\":882}],632:[function(require,module,exports){/**\n * @fileoverview Rule to enforce that all class methods use 'this'.\n * @author Patrick Williams\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce that class methods utilize `this`\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{exceptMethods:{type:\"array\",items:{type:\"string\"}}},additionalProperties:false}]},create:function create(context){var config=context.options[0]?(0,_assign4.default)({},context.options[0]):{};var exceptMethods=new _set3.default(config.exceptMethods||[]);var stack=[];/**\n         * Initializes the current context to false and pushes it onto the stack.\n         * These booleans represent whether 'this' has been used in the context.\n         * @returns {void}\n         * @private\n         */function enterFunction(){stack.push(false);}/**\n         * Check if the node is an instance method\n         * @param {ASTNode} node - node to check\n         * @returns {boolean} True if its an instance method\n         * @private\n         */function isInstanceMethod(node){return!node.static&&node.kind!==\"constructor\"&&node.type===\"MethodDefinition\";}/**\n         * Check if the node is an instance method not excluded by config\n         * @param {ASTNode} node - node to check\n         * @returns {boolean} True if it is an instance method, and not excluded by config\n         * @private\n         */function isIncludedInstanceMethod(node){return isInstanceMethod(node)&&!exceptMethods.has(node.key.name);}/**\n         * Checks if we are leaving a function that is a method, and reports if 'this' has not been used.\n         * Static methods and the constructor are exempt.\n         * Then pops the context off the stack.\n         * @param {ASTNode} node - A function node that was entered.\n         * @returns {void}\n         * @private\n         */function exitFunction(node){var methodUsesThis=stack.pop();if(isIncludedInstanceMethod(node.parent)&&!methodUsesThis){context.report({node:node,message:\"Expected 'this' to be used by class method '{{classMethod}}'.\",data:{classMethod:node.parent.key.name}});}}/**\n         * Mark the current context as having used 'this'.\n         * @returns {void}\n         * @private\n         */function markThisUsed(){if(stack.length){stack[stack.length-1]=true;}}return{FunctionDeclaration:enterFunction,\"FunctionDeclaration:exit\":exitFunction,FunctionExpression:enterFunction,\"FunctionExpression:exit\":exitFunction,ThisExpression:markThisUsed,Super:markThisUsed};}};},{}],633:[function(require,module,exports){/**\n * @fileoverview Rule to forbid or enforce dangling commas.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar DEFAULT_OPTIONS=(0,_freeze2.default)({arrays:\"never\",objects:\"never\",imports:\"never\",exports:\"never\",functions:\"ignore\"});/**\n * Checks whether or not a trailing comma is allowed in a given node.\n * If the `lastItem` is `RestElement` or `RestProperty`, it disallows trailing commas.\n *\n * @param {ASTNode} lastItem - The node of the last element in the given node.\n * @returns {boolean} `true` if a trailing comma is allowed.\n */function isTrailingCommaAllowed(lastItem){return!(lastItem.type===\"RestElement\"||lastItem.type===\"RestProperty\"||lastItem.type===\"ExperimentalRestProperty\");}/**\n * Normalize option value.\n *\n * @param {string|Object|undefined} optionValue - The 1st option value to normalize.\n * @returns {Object} The normalized option value.\n */function normalizeOptions(optionValue){if(typeof optionValue===\"string\"){return{arrays:optionValue,objects:optionValue,imports:optionValue,exports:optionValue,// For backward compatibility, always ignore functions.\nfunctions:\"ignore\"};}if((typeof optionValue===\"undefined\"?\"undefined\":_typeof(optionValue))===\"object\"&&optionValue!==null){return{arrays:optionValue.arrays||DEFAULT_OPTIONS.arrays,objects:optionValue.objects||DEFAULT_OPTIONS.objects,imports:optionValue.imports||DEFAULT_OPTIONS.imports,exports:optionValue.exports||DEFAULT_OPTIONS.exports,functions:optionValue.functions||DEFAULT_OPTIONS.functions};}return DEFAULT_OPTIONS;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow trailing commas\",category:\"Stylistic Issues\",recommended:false},fixable:\"code\",schema:[{defs:{value:{enum:[\"always\",\"always-multiline\",\"only-multiline\",\"never\"]},valueWithIgnore:{anyOf:[{$ref:\"#/defs/value\"},{enum:[\"ignore\"]}]}},anyOf:[{$ref:\"#/defs/value\"},{type:\"object\",properties:{arrays:{$refs:\"#/defs/valueWithIgnore\"},objects:{$refs:\"#/defs/valueWithIgnore\"},imports:{$refs:\"#/defs/valueWithIgnore\"},exports:{$refs:\"#/defs/valueWithIgnore\"},functions:{$refs:\"#/defs/valueWithIgnore\"}},additionalProperties:false}]}]},create:function create(context){var options=normalizeOptions(context.options[0]);var sourceCode=context.getSourceCode();var UNEXPECTED_MESSAGE=\"Unexpected trailing comma.\";var MISSING_MESSAGE=\"Missing trailing comma.\";/**\n         * Gets the last item of the given node.\n         * @param {ASTNode} node - The node to get.\n         * @returns {ASTNode|null} The last node or null.\n         */function getLastItem(node){switch(node.type){case\"ObjectExpression\":case\"ObjectPattern\":return lodash.last(node.properties);case\"ArrayExpression\":case\"ArrayPattern\":return lodash.last(node.elements);case\"ImportDeclaration\":case\"ExportNamedDeclaration\":return lodash.last(node.specifiers);case\"FunctionDeclaration\":case\"FunctionExpression\":case\"ArrowFunctionExpression\":return lodash.last(node.params);case\"CallExpression\":case\"NewExpression\":return lodash.last(node.arguments);default:return null;}}/**\n         * Gets the trailing comma token of the given node.\n         * If the trailing comma does not exist, this returns the token which is\n         * the insertion point of the trailing comma token.\n         *\n         * @param {ASTNode} node - The node to get.\n         * @param {ASTNode} lastItem - The last item of the node.\n         * @returns {Token} The trailing comma token or the insertion point.\n         */function getTrailingToken(node,lastItem){switch(node.type){case\"ObjectExpression\":case\"ArrayExpression\":case\"CallExpression\":case\"NewExpression\":return sourceCode.getLastToken(node,1);default:{var nextToken=sourceCode.getTokenAfter(lastItem);if(astUtils.isCommaToken(nextToken)){return nextToken;}return sourceCode.getLastToken(lastItem);}}}/**\n         * Checks whether or not a given node is multiline.\n         * This rule handles a given node as multiline when the closing parenthesis\n         * and the last element are not on the same line.\n         *\n         * @param {ASTNode} node - A node to check.\n         * @returns {boolean} `true` if the node is multiline.\n         */function isMultiline(node){var lastItem=getLastItem(node);if(!lastItem){return false;}var penultimateToken=getTrailingToken(node,lastItem);var lastToken=sourceCode.getTokenAfter(penultimateToken);return lastToken.loc.end.line!==penultimateToken.loc.end.line;}/**\n         * Reports a trailing comma if it exists.\n         *\n         * @param {ASTNode} node - A node to check. Its type is one of\n         *   ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern,\n         *   ImportDeclaration, and ExportNamedDeclaration.\n         * @returns {void}\n         */function forbidTrailingComma(node){var lastItem=getLastItem(node);if(!lastItem||node.type===\"ImportDeclaration\"&&lastItem.type!==\"ImportSpecifier\"){return;}var trailingToken=getTrailingToken(node,lastItem);if(astUtils.isCommaToken(trailingToken)){context.report({node:lastItem,loc:trailingToken.loc.start,message:UNEXPECTED_MESSAGE,fix:function fix(fixer){return fixer.remove(trailingToken);}});}}/**\n         * Reports the last element of a given node if it does not have a trailing\n         * comma.\n         *\n         * If a given node is `ArrayPattern` which has `RestElement`, the trailing\n         * comma is disallowed, so report if it exists.\n         *\n         * @param {ASTNode} node - A node to check. Its type is one of\n         *   ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern,\n         *   ImportDeclaration, and ExportNamedDeclaration.\n         * @returns {void}\n         */function forceTrailingComma(node){var lastItem=getLastItem(node);if(!lastItem||node.type===\"ImportDeclaration\"&&lastItem.type!==\"ImportSpecifier\"){return;}if(!isTrailingCommaAllowed(lastItem)){forbidTrailingComma(node);return;}var trailingToken=getTrailingToken(node,lastItem);if(trailingToken.value!==\",\"){context.report({node:lastItem,loc:trailingToken.loc.end,message:MISSING_MESSAGE,fix:function fix(fixer){return fixer.insertTextAfter(trailingToken,\",\");}});}}/**\n         * If a given node is multiline, reports the last element of a given node\n         * when it does not have a trailing comma.\n         * Otherwise, reports a trailing comma if it exists.\n         *\n         * @param {ASTNode} node - A node to check. Its type is one of\n         *   ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern,\n         *   ImportDeclaration, and ExportNamedDeclaration.\n         * @returns {void}\n         */function forceTrailingCommaIfMultiline(node){if(isMultiline(node)){forceTrailingComma(node);}else{forbidTrailingComma(node);}}/**\n         * Only if a given node is not multiline, reports the last element of a given node\n         * when it does not have a trailing comma.\n         * Otherwise, reports a trailing comma if it exists.\n         *\n         * @param {ASTNode} node - A node to check. Its type is one of\n         *   ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern,\n         *   ImportDeclaration, and ExportNamedDeclaration.\n         * @returns {void}\n         */function allowTrailingCommaIfMultiline(node){if(!isMultiline(node)){forbidTrailingComma(node);}}var predicate={always:forceTrailingComma,\"always-multiline\":forceTrailingCommaIfMultiline,\"only-multiline\":allowTrailingCommaIfMultiline,never:forbidTrailingComma,ignore:lodash.noop};return{ObjectExpression:predicate[options.objects],ObjectPattern:predicate[options.objects],ArrayExpression:predicate[options.arrays],ArrayPattern:predicate[options.arrays],ImportDeclaration:predicate[options.imports],ExportNamedDeclaration:predicate[options.exports],FunctionDeclaration:predicate[options.functions],FunctionExpression:predicate[options.functions],ArrowFunctionExpression:predicate[options.functions],CallExpression:predicate[options.functions],NewExpression:predicate[options.functions]};}};},{\"../ast-utils\":605,\"lodash\":566}],634:[function(require,module,exports){/**\n * @fileoverview Comma spacing - validates spacing before and after comma\n * @author Vignesh Anand aka vegetableman.\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing before and after commas\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{before:{type:\"boolean\"},after:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();var tokensAndComments=sourceCode.tokensAndComments;var options={before:context.options[0]?!!context.options[0].before:false,after:context.options[0]?!!context.options[0].after:true};//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n// list of comma tokens to ignore for the check of leading whitespace\nvar commaTokensToIgnore=[];/**\n         * Reports a spacing error with an appropriate message.\n         * @param {ASTNode} node The binary expression node to report.\n         * @param {string} dir Is the error \"before\" or \"after\" the comma?\n         * @param {ASTNode} otherNode The node at the left or right of `node`\n         * @returns {void}\n         * @private\n         */function report(node,dir,otherNode){context.report({node:node,fix:function fix(fixer){if(options[dir]){if(dir===\"before\"){return fixer.insertTextBefore(node,\" \");}return fixer.insertTextAfter(node,\" \");}var start=void 0,end=void 0;var newText=\"\";if(dir===\"before\"){start=otherNode.range[1];end=node.range[0];}else{start=node.range[1];end=otherNode.range[0];}return fixer.replaceTextRange([start,end],newText);},message:options[dir]?\"A space is required {{dir}} ','.\":\"There should be no space {{dir}} ','.\",data:{dir:dir}});}/**\n         * Validates the spacing around a comma token.\n         * @param {Object} tokens - The tokens to be validated.\n         * @param {Token} tokens.comma The token representing the comma.\n         * @param {Token} [tokens.left] The last token before the comma.\n         * @param {Token} [tokens.right] The first token after the comma.\n         * @param {Token|ASTNode} reportItem The item to use when reporting an error.\n         * @returns {void}\n         * @private\n         */function validateCommaItemSpacing(tokens,reportItem){if(tokens.left&&astUtils.isTokenOnSameLine(tokens.left,tokens.comma)&&options.before!==sourceCode.isSpaceBetweenTokens(tokens.left,tokens.comma)){report(reportItem,\"before\",tokens.left);}if(tokens.right&&!options.after&&tokens.right.type===\"Line\"){return;}if(tokens.right&&astUtils.isTokenOnSameLine(tokens.comma,tokens.right)&&options.after!==sourceCode.isSpaceBetweenTokens(tokens.comma,tokens.right)){report(reportItem,\"after\",tokens.right);}}/**\n         * Adds null elements of the given ArrayExpression or ArrayPattern node to the ignore list.\n         * @param {ASTNode} node An ArrayExpression or ArrayPattern node.\n         * @returns {void}\n         */function addNullElementsToIgnoreList(node){var previousToken=sourceCode.getFirstToken(node);node.elements.forEach(function(element){var token=void 0;if(element===null){token=sourceCode.getTokenAfter(previousToken);if(astUtils.isCommaToken(token)){commaTokensToIgnore.push(token);}}else{token=sourceCode.getTokenAfter(element);}previousToken=token;});}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{\"Program:exit\":function ProgramExit(){tokensAndComments.forEach(function(token,i){if(!astUtils.isCommaToken(token)){return;}if(token&&token.type===\"JSXText\"){return;}var previousToken=tokensAndComments[i-1];var nextToken=tokensAndComments[i+1];validateCommaItemSpacing({comma:token,left:astUtils.isCommaToken(previousToken)||commaTokensToIgnore.indexOf(token)>-1?null:previousToken,right:astUtils.isCommaToken(nextToken)?null:nextToken},token);});},ArrayExpression:addNullElementsToIgnoreList,ArrayPattern:addNullElementsToIgnoreList};}};},{\"../ast-utils\":605}],635:[function(require,module,exports){/**\n * @fileoverview Comma style - enforces comma styles of two types: last and first\n * @author Vignesh Anand aka vegetableman\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent comma style\",category:\"Stylistic Issues\",recommended:false},fixable:\"code\",schema:[{enum:[\"first\",\"last\"]},{type:\"object\",properties:{exceptions:{type:\"object\",additionalProperties:{type:\"boolean\"}}},additionalProperties:false}]},create:function create(context){var style=context.options[0]||\"last\",sourceCode=context.getSourceCode();var exceptions={ArrayPattern:true,ArrowFunctionExpression:true,CallExpression:true,FunctionDeclaration:true,FunctionExpression:true,ImportDeclaration:true,ObjectPattern:true};if(context.options.length===2&&context.options[1].hasOwnProperty(\"exceptions\")){var keys=(0,_keys4.default)(context.options[1].exceptions);for(var i=0;i<keys.length;i++){exceptions[keys[i]]=context.options[1].exceptions[keys[i]];}}//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Modified text based on the style\n         * @param {string} styleType Style type\n         * @param {string} text Source code text\n         * @returns {string} modified text\n         * @private\n         */function getReplacedText(styleType,text){switch(styleType){case\"between\":return\",\"+text.replace(\"\\n\",\"\");case\"first\":return text+\",\";case\"last\":return\",\"+text;default:return\"\";}}/**\n         * Determines the fixer function for a given style.\n         * @param {string} styleType comma style\n         * @param {ASTNode} previousItemToken The token to check.\n         * @param {ASTNode} commaToken The token to check.\n         * @param {ASTNode} currentItemToken The token to check.\n         * @returns {Function} Fixer function\n         * @private\n         */function getFixerFunction(styleType,previousItemToken,commaToken,currentItemToken){var text=sourceCode.text.slice(previousItemToken.range[1],commaToken.range[0])+sourceCode.text.slice(commaToken.range[1],currentItemToken.range[0]);var range=[previousItemToken.range[1],currentItemToken.range[0]];return function(fixer){return fixer.replaceTextRange(range,getReplacedText(styleType,text));};}/**\n         * Validates the spacing around single items in lists.\n         * @param {Token} previousItemToken The last token from the previous item.\n         * @param {Token} commaToken The token representing the comma.\n         * @param {Token} currentItemToken The first token of the current item.\n         * @param {Token} reportItem The item to use when reporting an error.\n         * @returns {void}\n         * @private\n         */function validateCommaItemSpacing(previousItemToken,commaToken,currentItemToken,reportItem){// if single line\nif(astUtils.isTokenOnSameLine(commaToken,currentItemToken)&&astUtils.isTokenOnSameLine(previousItemToken,commaToken)){// do nothing.\n}else if(!astUtils.isTokenOnSameLine(commaToken,currentItemToken)&&!astUtils.isTokenOnSameLine(previousItemToken,commaToken)){// lone comma\ncontext.report({node:reportItem,loc:{line:commaToken.loc.end.line,column:commaToken.loc.start.column},message:\"Bad line breaking before and after ','.\",fix:getFixerFunction(\"between\",previousItemToken,commaToken,currentItemToken)});}else if(style===\"first\"&&!astUtils.isTokenOnSameLine(commaToken,currentItemToken)){context.report({node:reportItem,message:\"',' should be placed first.\",fix:getFixerFunction(style,previousItemToken,commaToken,currentItemToken)});}else if(style===\"last\"&&astUtils.isTokenOnSameLine(commaToken,currentItemToken)){context.report({node:reportItem,loc:{line:commaToken.loc.end.line,column:commaToken.loc.end.column},message:\"',' should be placed last.\",fix:getFixerFunction(style,previousItemToken,commaToken,currentItemToken)});}}/**\n         * Checks the comma placement with regards to a declaration/property/element\n         * @param {ASTNode} node The binary expression node to check\n         * @param {string} property The property of the node containing child nodes.\n         * @private\n         * @returns {void}\n         */function validateComma(node,property){var items=node[property],arrayLiteral=node.type===\"ArrayExpression\"||node.type===\"ArrayPattern\";if(items.length>1||arrayLiteral){// seed as opening [\nvar previousItemToken=sourceCode.getFirstToken(node);items.forEach(function(item){var commaToken=item?sourceCode.getTokenBefore(item):previousItemToken,currentItemToken=item?sourceCode.getFirstToken(item):sourceCode.getTokenAfter(commaToken),reportItem=item||currentItemToken,tokenBeforeComma=sourceCode.getTokenBefore(commaToken);// Check if previous token is wrapped in parentheses\nif(tokenBeforeComma&&astUtils.isClosingParenToken(tokenBeforeComma)){previousItemToken=tokenBeforeComma;}/*\n                     * This works by comparing three token locations:\n                     * - previousItemToken is the last token of the previous item\n                     * - commaToken is the location of the comma before the current item\n                     * - currentItemToken is the first token of the current item\n                     *\n                     * These values get switched around if item is undefined.\n                     * previousItemToken will refer to the last token not belonging\n                     * to the current item, which could be a comma or an opening\n                     * square bracket. currentItemToken could be a comma.\n                     *\n                     * All comparisons are done based on these tokens directly, so\n                     * they are always valid regardless of an undefined item.\n                     */if(astUtils.isCommaToken(commaToken)){validateCommaItemSpacing(previousItemToken,commaToken,currentItemToken,reportItem);}if(item){var tokenAfterItem=sourceCode.getTokenAfter(item,astUtils.isNotClosingParenToken);previousItemToken=tokenAfterItem?sourceCode.getTokenBefore(tokenAfterItem):sourceCode.ast.tokens[sourceCode.ast.tokens.length-1];}});/*\n                 * Special case for array literals that have empty last items, such\n                 * as [ 1, 2, ]. These arrays only have two items show up in the\n                 * AST, so we need to look at the token to verify that there's no\n                 * dangling comma.\n                 */if(arrayLiteral){var lastToken=sourceCode.getLastToken(node),nextToLastToken=sourceCode.getTokenBefore(lastToken);if(astUtils.isCommaToken(nextToLastToken)){validateCommaItemSpacing(sourceCode.getTokenBefore(nextToLastToken),nextToLastToken,lastToken,lastToken);}}}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nvar nodes={};if(!exceptions.VariableDeclaration){nodes.VariableDeclaration=function(node){validateComma(node,\"declarations\");};}if(!exceptions.ObjectExpression){nodes.ObjectExpression=function(node){validateComma(node,\"properties\");};}if(!exceptions.ObjectPattern){nodes.ObjectPattern=function(node){validateComma(node,\"properties\");};}if(!exceptions.ArrayExpression){nodes.ArrayExpression=function(node){validateComma(node,\"elements\");};}if(!exceptions.ArrayPattern){nodes.ArrayPattern=function(node){validateComma(node,\"elements\");};}if(!exceptions.FunctionDeclaration){nodes.FunctionDeclaration=function(node){validateComma(node,\"params\");};}if(!exceptions.FunctionExpression){nodes.FunctionExpression=function(node){validateComma(node,\"params\");};}if(!exceptions.ArrowFunctionExpression){nodes.ArrowFunctionExpression=function(node){validateComma(node,\"params\");};}if(!exceptions.CallExpression){nodes.CallExpression=function(node){validateComma(node,\"arguments\");};}if(!exceptions.ImportDeclaration){nodes.ImportDeclaration=function(node){validateComma(node,\"specifiers\");};}return nodes;}};},{\"../ast-utils\":605}],636:[function(require,module,exports){/**\n * @fileoverview Counts the cyclomatic complexity of each function of the script. See http://en.wikipedia.org/wiki/Cyclomatic_complexity.\n * Counts the number of if, conditional, for, whilte, try, switch/case,\n * @author Patrick Brosset\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce a maximum cyclomatic complexity allowed in a program\",category:\"Best Practices\",recommended:false},schema:[{oneOf:[{type:\"integer\",minimum:0},{type:\"object\",properties:{maximum:{type:\"integer\",minimum:0},max:{type:\"integer\",minimum:0}},additionalProperties:false}]}]},create:function create(context){var option=context.options[0];var THRESHOLD=20;if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"maximum\")&&typeof option.maximum===\"number\"){THRESHOLD=option.maximum;}if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"max\")&&typeof option.max===\"number\"){THRESHOLD=option.max;}if(typeof option===\"number\"){THRESHOLD=option;}//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n// Using a stack to store complexity (handling nested functions)\nvar fns=[];/**\n         * When parsing a new function, store it in our function stack\n         * @returns {void}\n         * @private\n         */function startFunction(){fns.push(1);}/**\n         * Evaluate the node at the end of function\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function endFunction(node){var name=lodash.upperFirst(astUtils.getFunctionNameWithKind(node));var complexity=fns.pop();if(complexity>THRESHOLD){context.report({node:node,message:\"{{name}} has a complexity of {{complexity}}.\",data:{name:name,complexity:complexity}});}}/**\n         * Increase the complexity of the function in context\n         * @returns {void}\n         * @private\n         */function increaseComplexity(){if(fns.length){fns[fns.length-1]++;}}/**\n         * Increase the switch complexity in context\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function increaseSwitchComplexity(node){// Avoiding `default`\nif(node.test){increaseComplexity(node);}}/**\n         * Increase the logical path complexity in context\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function increaseLogicalComplexity(node){// Avoiding &&\nif(node.operator===\"||\"){increaseComplexity(node);}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{FunctionDeclaration:startFunction,FunctionExpression:startFunction,ArrowFunctionExpression:startFunction,\"FunctionDeclaration:exit\":endFunction,\"FunctionExpression:exit\":endFunction,\"ArrowFunctionExpression:exit\":endFunction,CatchClause:increaseComplexity,ConditionalExpression:increaseComplexity,LogicalExpression:increaseLogicalComplexity,ForStatement:increaseComplexity,ForInStatement:increaseComplexity,ForOfStatement:increaseComplexity,IfStatement:increaseComplexity,SwitchCase:increaseSwitchComplexity,WhileStatement:increaseComplexity,DoWhileStatement:increaseComplexity};}};},{\"../ast-utils\":605,\"lodash\":566}],637:[function(require,module,exports){/**\n * @fileoverview Disallows or enforces spaces inside computed properties.\n * @author Jamund Ferguson\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing inside computed property brackets\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]}]},create:function create(context){var sourceCode=context.getSourceCode();var propertyNameMustBeSpaced=context.options[0]===\"always\";// default is \"never\"\n//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n        * Reports that there shouldn't be a space after the first token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @param {Token} tokenAfter - The token after `token`.\n        * @returns {void}\n        */function reportNoBeginningSpace(node,token,tokenAfter){context.report({node:node,loc:token.loc.start,message:\"There should be no space after '{{tokenValue}}'.\",data:{tokenValue:token.value},fix:function fix(fixer){return fixer.removeRange([token.range[1],tokenAfter.range[0]]);}});}/**\n        * Reports that there shouldn't be a space before the last token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @param {Token} tokenBefore - The token before `token`.\n        * @returns {void}\n        */function reportNoEndingSpace(node,token,tokenBefore){context.report({node:node,loc:token.loc.start,message:\"There should be no space before '{{tokenValue}}'.\",data:{tokenValue:token.value},fix:function fix(fixer){return fixer.removeRange([tokenBefore.range[1],token.range[0]]);}});}/**\n        * Reports that there should be a space after the first token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportRequiredBeginningSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"A space is required after '{{tokenValue}}'.\",data:{tokenValue:token.value},fix:function fix(fixer){return fixer.insertTextAfter(token,\" \");}});}/**\n        * Reports that there should be a space before the last token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportRequiredEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"A space is required before '{{tokenValue}}'.\",data:{tokenValue:token.value},fix:function fix(fixer){return fixer.insertTextBefore(token,\" \");}});}/**\n         * Returns a function that checks the spacing of a node on the property name\n         * that was passed in.\n         * @param {string} propertyName The property on the node to check for spacing\n         * @returns {Function} A function that will check spacing on a node\n         */function checkSpacing(propertyName){return function(node){if(!node.computed){return;}var property=node[propertyName];var before=sourceCode.getTokenBefore(property),first=sourceCode.getFirstToken(property),last=sourceCode.getLastToken(property),after=sourceCode.getTokenAfter(property);if(astUtils.isTokenOnSameLine(before,first)){if(propertyNameMustBeSpaced){if(!sourceCode.isSpaceBetweenTokens(before,first)&&astUtils.isTokenOnSameLine(before,first)){reportRequiredBeginningSpace(node,before);}}else{if(sourceCode.isSpaceBetweenTokens(before,first)){reportNoBeginningSpace(node,before,first);}}}if(astUtils.isTokenOnSameLine(last,after)){if(propertyNameMustBeSpaced){if(!sourceCode.isSpaceBetweenTokens(last,after)&&astUtils.isTokenOnSameLine(last,after)){reportRequiredEndingSpace(node,after);}}else{if(sourceCode.isSpaceBetweenTokens(last,after)){reportNoEndingSpace(node,after,last);}}}};}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Property:checkSpacing(\"key\"),MemberExpression:checkSpacing(\"property\")};}};},{\"../ast-utils\":605}],638:[function(require,module,exports){/**\n * @fileoverview Rule to flag consistent return values\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given node is an `Identifier` node which was named a given name.\n * @param {ASTNode} node - A node to check.\n * @param {string} name - An expected name of the node.\n * @returns {boolean} `true` if the node is an `Identifier` node which was named as expected.\n */function isIdentifier(node,name){return node.type===\"Identifier\"&&node.name===name;}/**\n * Checks whether or not a given code path segment is unreachable.\n * @param {CodePathSegment} segment - A CodePathSegment to check.\n * @returns {boolean} `true` if the segment is unreachable.\n */function isUnreachable(segment){return!segment.reachable;}/**\n* Checks whether a given node is a `constructor` method in an ES6 class\n* @param {ASTNode} node A node to check\n* @returns {boolean} `true` if the node is a `constructor` method\n*/function isClassConstructor(node){return node.type===\"FunctionExpression\"&&node.parent&&node.parent.type===\"MethodDefinition\"&&node.parent.kind===\"constructor\";}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `return` statements to either always or never specify values\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{treatUndefinedAsUnspecified:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var treatUndefinedAsUnspecified=options.treatUndefinedAsUnspecified===true;var funcInfo=null;/**\n         * Checks whether of not the implicit returning is consistent if the last\n         * code path segment is reachable.\n         *\n         * @param {ASTNode} node - A program/function node to check.\n         * @returns {void}\n         */function checkLastSegment(node){var loc=void 0,name=void 0;/*\n             * Skip if it expected no return value or unreachable.\n             * When unreachable, all paths are returned or thrown.\n             */if(!funcInfo.hasReturnValue||funcInfo.codePath.currentSegments.every(isUnreachable)||astUtils.isES5Constructor(node)||isClassConstructor(node)){return;}// Adjust a location and a message.\nif(node.type===\"Program\"){// The head of program.\nloc={line:1,column:0};name=\"program\";}else if(node.type===\"ArrowFunctionExpression\"){// `=>` token\nloc=context.getSourceCode().getTokenBefore(node.body,astUtils.isArrowToken).loc.start;}else if(node.parent.type===\"MethodDefinition\"||node.parent.type===\"Property\"&&node.parent.method){// Method name.\nloc=node.parent.key.loc.start;}else{// Function name or `function` keyword.\nloc=(node.id||node).loc.start;}if(!name){name=astUtils.getFunctionNameWithKind(node);}// Reports.\ncontext.report({node:node,loc:loc,message:\"Expected to return a value at the end of {{name}}.\",data:{name:name}});}return{// Initializes/Disposes state of each code path.\nonCodePathStart:function onCodePathStart(codePath,node){funcInfo={upper:funcInfo,codePath:codePath,hasReturn:false,hasReturnValue:false,message:\"\",node:node};},onCodePathEnd:function onCodePathEnd(){funcInfo=funcInfo.upper;},// Reports a given return statement if it's inconsistent.\nReturnStatement:function ReturnStatement(node){var argument=node.argument;var hasReturnValue=Boolean(argument);if(treatUndefinedAsUnspecified&&hasReturnValue){hasReturnValue=!isIdentifier(argument,\"undefined\")&&argument.operator!==\"void\";}if(!funcInfo.hasReturn){funcInfo.hasReturn=true;funcInfo.hasReturnValue=hasReturnValue;funcInfo.message=\"{{name}} expected {{which}} return value.\";funcInfo.data={name:funcInfo.node.type===\"Program\"?\"Program\":lodash.upperFirst(astUtils.getFunctionNameWithKind(funcInfo.node)),which:hasReturnValue?\"a\":\"no\"};}else if(funcInfo.hasReturnValue!==hasReturnValue){context.report({node:node,message:funcInfo.message,data:funcInfo.data});}},// Reports a given program/function if the implicit returning is not consistent.\n\"Program:exit\":checkLastSegment,\"FunctionDeclaration:exit\":checkLastSegment,\"FunctionExpression:exit\":checkLastSegment,\"ArrowFunctionExpression:exit\":checkLastSegment};}};},{\"../ast-utils\":605,\"lodash\":566}],639:[function(require,module,exports){/**\n * @fileoverview Rule to enforce consistent naming of \"this\" context variables\n * @author Raphael Pigulla\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent naming when capturing the current execution context\",category:\"Stylistic Issues\",recommended:false},schema:{type:\"array\",items:{type:\"string\",minLength:1},uniqueItems:true}},create:function create(context){var aliases=[];if(context.options.length===0){aliases.push(\"that\");}else{aliases=context.options;}/**\n         * Reports that a variable declarator or assignment expression is assigning\n         * a non-'this' value to the specified alias.\n         * @param {ASTNode} node - The assigning node.\n         * @param {string} alias - the name of the alias that was incorrectly used.\n         * @returns {void}\n         */function reportBadAssignment(node,alias){context.report({node:node,message:\"Designated alias '{{alias}}' is not assigned to 'this'.\",data:{alias:alias}});}/**\n         * Checks that an assignment to an identifier only assigns 'this' to the\n         * appropriate alias, and the alias is only assigned to 'this'.\n         * @param {ASTNode} node - The assigning node.\n         * @param {Identifier} name - The name of the variable assigned to.\n         * @param {Expression} value - The value of the assignment.\n         * @returns {void}\n         */function checkAssignment(node,name,value){var isThis=value.type===\"ThisExpression\";if(aliases.indexOf(name)!==-1){if(!isThis||node.operator&&node.operator!==\"=\"){reportBadAssignment(node,name);}}else if(isThis){context.report({node:node,message:\"Unexpected alias '{{name}}' for 'this'.\",data:{name:name}});}}/**\n         * Ensures that a variable declaration of the alias in a program or function\n         * is assigned to the correct value.\n         * @param {string} alias alias the check the assignment of.\n         * @param {Object} scope scope of the current code we are checking.\n         * @private\n         * @returns {void}\n         */function checkWasAssigned(alias,scope){var variable=scope.set.get(alias);if(!variable){return;}if(variable.defs.some(function(def){return def.node.type===\"VariableDeclarator\"&&def.node.init!==null;})){return;}// The alias has been declared and not assigned: check it was\n// assigned later in the same scope.\nif(!variable.references.some(function(reference){var write=reference.writeExpr;return reference.from===scope&&write&&write.type===\"ThisExpression\"&&write.parent.operator===\"=\";})){variable.defs.map(function(def){return def.node;}).forEach(function(node){reportBadAssignment(node,alias);});}}/**\n         * Check each alias to ensure that is was assinged to the correct value.\n         * @returns {void}\n         */function ensureWasAssigned(){var scope=context.getScope();aliases.forEach(function(alias){checkWasAssigned(alias,scope);});}return{\"Program:exit\":ensureWasAssigned,\"FunctionExpression:exit\":ensureWasAssigned,\"FunctionDeclaration:exit\":ensureWasAssigned,VariableDeclarator:function VariableDeclarator(node){var id=node.id;var isDestructuring=id.type===\"ArrayPattern\"||id.type===\"ObjectPattern\";if(node.init!==null&&!isDestructuring){checkAssignment(node,id.name,node.init);}},AssignmentExpression:function AssignmentExpression(node){if(node.left.type===\"Identifier\"){checkAssignment(node,node.left.name,node.right);}}};}};},{}],640:[function(require,module,exports){/**\n * @fileoverview A rule to verify `super()` callings in constructor.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether a given code path segment is reachable or not.\n *\n * @param {CodePathSegment} segment - A code path segment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */function isReachable(segment){return segment.reachable;}/**\n * Checks whether or not a given node is a constructor.\n * @param {ASTNode} node - A node to check. This node type is one of\n *   `Program`, `FunctionDeclaration`, `FunctionExpression`, and\n *   `ArrowFunctionExpression`.\n * @returns {boolean} `true` if the node is a constructor.\n */function isConstructorFunction(node){return node.type===\"FunctionExpression\"&&node.parent.type===\"MethodDefinition\"&&node.parent.kind===\"constructor\";}/**\n * Checks whether a given node can be a constructor or not.\n *\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node can be a constructor.\n */function isPossibleConstructor(node){if(!node){return false;}switch(node.type){case\"ClassExpression\":case\"FunctionExpression\":case\"ThisExpression\":case\"MemberExpression\":case\"CallExpression\":case\"NewExpression\":case\"YieldExpression\":case\"TaggedTemplateExpression\":case\"MetaProperty\":return true;case\"Identifier\":return node.name!==\"undefined\";case\"AssignmentExpression\":return isPossibleConstructor(node.right);case\"LogicalExpression\":return isPossibleConstructor(node.left)||isPossibleConstructor(node.right);case\"ConditionalExpression\":return isPossibleConstructor(node.alternate)||isPossibleConstructor(node.consequent);case\"SequenceExpression\":{var lastExpression=node.expressions[node.expressions.length-1];return isPossibleConstructor(lastExpression);}default:return false;}}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `super()` calls in constructors\",category:\"ECMAScript 6\",recommended:true},schema:[]},create:function create(context){/*\n         * {{hasExtends: boolean, scope: Scope, codePath: CodePath}[]}\n         * Information for each constructor.\n         * - upper:      Information of the upper constructor.\n         * - hasExtends: A flag which shows whether own class has a valid `extends`\n         *               part.\n         * - scope:      The scope of own class.\n         * - codePath:   The code path object of the constructor.\n         */var funcInfo=null;/*\n         * {Map<string, {calledInSomePaths: boolean, calledInEveryPaths: boolean}>}\n         * Information for each code path segment.\n         * - calledInSomePaths:  A flag of be called `super()` in some code paths.\n         * - calledInEveryPaths: A flag of be called `super()` in all code paths.\n         * - validNodes:\n         */var segInfoMap=(0,_create4.default)(null);/**\n         * Gets the flag which shows `super()` is called in some paths.\n         * @param {CodePathSegment} segment - A code path segment to get.\n         * @returns {boolean} The flag which shows `super()` is called in some paths\n         */function isCalledInSomePath(segment){return segment.reachable&&segInfoMap[segment.id].calledInSomePaths;}/**\n         * Gets the flag which shows `super()` is called in all paths.\n         * @param {CodePathSegment} segment - A code path segment to get.\n         * @returns {boolean} The flag which shows `super()` is called in all paths.\n         */function isCalledInEveryPath(segment){/*\n             * If specific segment is the looped segment of the current segment,\n             * skip the segment.\n             * If not skipped, this never becomes true after a loop.\n             */if(segment.nextSegments.length===1&&segment.nextSegments[0].isLoopedPrevSegment(segment)){return true;}return segment.reachable&&segInfoMap[segment.id].calledInEveryPaths;}return{/**\n             * Stacks a constructor information.\n             * @param {CodePath} codePath - A code path which was started.\n             * @param {ASTNode} node - The current node.\n             * @returns {void}\n             */onCodePathStart:function onCodePathStart(codePath,node){if(isConstructorFunction(node)){// Class > ClassBody > MethodDefinition > FunctionExpression\nvar classNode=node.parent.parent.parent;var superClass=classNode.superClass;funcInfo={upper:funcInfo,isConstructor:true,hasExtends:Boolean(superClass),superIsConstructor:isPossibleConstructor(superClass),codePath:codePath};}else{funcInfo={upper:funcInfo,isConstructor:false,hasExtends:false,superIsConstructor:false,codePath:codePath};}},/**\n             * Pops a constructor information.\n             * And reports if `super()` lacked.\n             * @param {CodePath} codePath - A code path which was ended.\n             * @param {ASTNode} node - The current node.\n             * @returns {void}\n             */onCodePathEnd:function onCodePathEnd(codePath,node){var hasExtends=funcInfo.hasExtends;// Pop.\nfuncInfo=funcInfo.upper;if(!hasExtends){return;}// Reports if `super()` lacked.\nvar segments=codePath.returnedSegments;var calledInEveryPaths=segments.every(isCalledInEveryPath);var calledInSomePaths=segments.some(isCalledInSomePath);if(!calledInEveryPaths){context.report({message:calledInSomePaths?\"Lacked a call of 'super()' in some code paths.\":\"Expected to call 'super()'.\",node:node.parent});}},/**\n             * Initialize information of a given code path segment.\n             * @param {CodePathSegment} segment - A code path segment to initialize.\n             * @returns {void}\n             */onCodePathSegmentStart:function onCodePathSegmentStart(segment){if(!(funcInfo&&funcInfo.isConstructor&&funcInfo.hasExtends)){return;}// Initialize info.\nvar info=segInfoMap[segment.id]={calledInSomePaths:false,calledInEveryPaths:false,validNodes:[]};// When there are previous segments, aggregates these.\nvar prevSegments=segment.prevSegments;if(prevSegments.length>0){info.calledInSomePaths=prevSegments.some(isCalledInSomePath);info.calledInEveryPaths=prevSegments.every(isCalledInEveryPath);}},/**\n             * Update information of the code path segment when a code path was\n             * looped.\n             * @param {CodePathSegment} fromSegment - The code path segment of the\n             *      end of a loop.\n             * @param {CodePathSegment} toSegment - A code path segment of the head\n             *      of a loop.\n             * @returns {void}\n             */onCodePathSegmentLoop:function onCodePathSegmentLoop(fromSegment,toSegment){if(!(funcInfo&&funcInfo.isConstructor&&funcInfo.hasExtends)){return;}// Update information inside of the loop.\nvar isRealLoop=toSegment.prevSegments.length>=2;funcInfo.codePath.traverseSegments({first:toSegment,last:fromSegment},function(segment){var info=segInfoMap[segment.id];var prevSegments=segment.prevSegments;// Updates flags.\ninfo.calledInSomePaths=prevSegments.some(isCalledInSomePath);info.calledInEveryPaths=prevSegments.every(isCalledInEveryPath);// If flags become true anew, reports the valid nodes.\nif(info.calledInSomePaths||isRealLoop){var nodes=info.validNodes;info.validNodes=[];for(var i=0;i<nodes.length;++i){var node=nodes[i];context.report({message:\"Unexpected duplicate 'super()'.\",node:node});}}});},/**\n             * Checks for a call of `super()`.\n             * @param {ASTNode} node - A CallExpression node to check.\n             * @returns {void}\n             */\"CallExpression:exit\":function CallExpressionExit(node){if(!(funcInfo&&funcInfo.isConstructor)){return;}// Skips except `super()`.\nif(node.callee.type!==\"Super\"){return;}// Reports if needed.\nif(funcInfo.hasExtends){var segments=funcInfo.codePath.currentSegments;var duplicate=false;var info=null;for(var i=0;i<segments.length;++i){var segment=segments[i];if(segment.reachable){info=segInfoMap[segment.id];duplicate=duplicate||info.calledInSomePaths;info.calledInSomePaths=info.calledInEveryPaths=true;}}if(info){if(duplicate){context.report({message:\"Unexpected duplicate 'super()'.\",node:node});}else if(!funcInfo.superIsConstructor){context.report({message:\"Unexpected 'super()' because 'super' is not a constructor.\",node:node});}else{info.validNodes.push(node);}}}else if(funcInfo.codePath.currentSegments.some(isReachable)){context.report({message:\"Unexpected 'super()'.\",node:node});}},/**\n             * Set the mark to the returned path as `super()` was called.\n             * @param {ASTNode} node - A ReturnStatement node to check.\n             * @returns {void}\n             */ReturnStatement:function ReturnStatement(node){if(!(funcInfo&&funcInfo.isConstructor&&funcInfo.hasExtends)){return;}// Skips if no argument.\nif(!node.argument){return;}// Returning argument is a substitute of 'super()'.\nvar segments=funcInfo.codePath.currentSegments;for(var i=0;i<segments.length;++i){var segment=segments[i];if(segment.reachable){var info=segInfoMap[segment.id];info.calledInSomePaths=info.calledInEveryPaths=true;}}},/**\n             * Resets state.\n             * @returns {void}\n             */\"Program:exit\":function ProgramExit(){segInfoMap=(0,_create4.default)(null);}};}};},{}],641:[function(require,module,exports){/**\n * @fileoverview Rule to flag statements without curly braces\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");var esUtils=require(\"esutils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent brace style for all control statements\",category:\"Best Practices\",recommended:false},schema:{anyOf:[{type:\"array\",items:[{enum:[\"all\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"multi\",\"multi-line\",\"multi-or-nest\"]},{enum:[\"consistent\"]}],minItems:0,maxItems:2}]},fixable:\"code\"},create:function create(context){var multiOnly=context.options[0]===\"multi\";var multiLine=context.options[0]===\"multi-line\";var multiOrNest=context.options[0]===\"multi-or-nest\";var consistent=context.options[1]===\"consistent\";var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Determines if a given node is a one-liner that's on the same line as it's preceding code.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node is a one-liner that's on the same line as it's preceding code.\n         * @private\n         */function isCollapsedOneLiner(node){var before=sourceCode.getTokenBefore(node);var last=sourceCode.getLastToken(node);var lastExcludingSemicolon=astUtils.isSemicolonToken(last)?sourceCode.getTokenBefore(last):last;return before.loc.start.line===lastExcludingSemicolon.loc.end.line;}/**\n         * Determines if a given node is a one-liner.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node is a one-liner.\n         * @private\n         */function isOneLiner(node){var first=sourceCode.getFirstToken(node),last=sourceCode.getLastToken(node);return first.loc.start.line===last.loc.end.line;}/**\n         * Checks if the given token is an `else` token or not.\n         *\n         * @param {Token} token - The token to check.\n         * @returns {boolean} `true` if the token is an `else` token.\n         */function isElseKeywordToken(token){return token.value===\"else\"&&token.type===\"Keyword\";}/**\n         * Gets the `else` keyword token of a given `IfStatement` node.\n         * @param {ASTNode} node - A `IfStatement` node to get.\n         * @returns {Token} The `else` keyword token.\n         */function getElseKeyword(node){return node.alternate&&sourceCode.getFirstTokenBetween(node.consequent,node.alternate,isElseKeywordToken);}/**\n         * Checks a given IfStatement node requires braces of the consequent chunk.\n         * This returns `true` when below:\n         *\n         * 1. The given node has the `alternate` node.\n         * 2. There is a `IfStatement` which doesn't have `alternate` node in the\n         *    trailing statement chain of the `consequent` node.\n         *\n         * @param {ASTNode} node - A IfStatement node to check.\n         * @returns {boolean} `true` if the node requires braces of the consequent chunk.\n         */function requiresBraceOfConsequent(node){if(node.alternate&&node.consequent.type===\"BlockStatement\"){if(node.consequent.body.length>=2){return true;}node=node.consequent.body[0];while(node){if(node.type===\"IfStatement\"&&!node.alternate){return true;}node=astUtils.getTrailingStatement(node);}}return false;}/**\n         * Reports \"Expected { after ...\" error\n         * @param {ASTNode} node The node to report.\n         * @param {ASTNode} bodyNode The body node that is incorrectly missing curly brackets\n         * @param {string} name The name to report.\n         * @param {string} suffix Additional string to add to the end of a report.\n         * @returns {void}\n         * @private\n         */function reportExpectedBraceError(node,bodyNode,name,suffix){context.report({node:node,loc:(name!==\"else\"?node:getElseKeyword(node)).loc.start,message:\"Expected { after '{{name}}'{{suffix}}.\",data:{name:name,suffix:suffix?\" \"+suffix:\"\"},fix:function fix(fixer){return fixer.replaceText(bodyNode,\"{\"+sourceCode.getText(bodyNode)+\"}\");}});}/**\n        * Determines if a semicolon needs to be inserted after removing a set of curly brackets, in order to avoid a SyntaxError.\n        * @param {Token} closingBracket The } token\n        * @returns {boolean} `true` if a semicolon needs to be inserted after the last statement in the block.\n        */function needsSemicolon(closingBracket){var tokenBefore=sourceCode.getTokenBefore(closingBracket);var tokenAfter=sourceCode.getTokenAfter(closingBracket);var lastBlockNode=sourceCode.getNodeByRangeIndex(tokenBefore.range[0]);if(astUtils.isSemicolonToken(tokenBefore)){// If the last statement already has a semicolon, don't add another one.\nreturn false;}if(!tokenAfter){// If there are no statements after this block, there is no need to add a semicolon.\nreturn false;}if(lastBlockNode.type===\"BlockStatement\"&&lastBlockNode.parent.type!==\"FunctionExpression\"&&lastBlockNode.parent.type!==\"ArrowFunctionExpression\"){// If the last node surrounded by curly brackets is a BlockStatement (other than a FunctionExpression or an ArrowFunctionExpression),\n// don't insert a semicolon. Otherwise, the semicolon would be parsed as a separate statement, which would cause\n// a SyntaxError if it was followed by `else`.\nreturn false;}if(tokenBefore.loc.end.line===tokenAfter.loc.start.line){// If the next token is on the same line, insert a semicolon.\nreturn true;}if(/^[([/`+-]/.test(tokenAfter.value)){// If the next token starts with a character that would disrupt ASI, insert a semicolon.\nreturn true;}if(tokenBefore.type===\"Punctuator\"&&(tokenBefore.value===\"++\"||tokenBefore.value===\"--\")){// If the last token is ++ or --, insert a semicolon to avoid disrupting ASI.\nreturn true;}// Otherwise, do not insert a semicolon.\nreturn false;}/**\n         * Reports \"Unnecessary { after ...\" error\n         * @param {ASTNode} node The node to report.\n         * @param {ASTNode} bodyNode The block statement that is incorrectly surrounded by parens\n         * @param {string} name The name to report.\n         * @param {string} suffix Additional string to add to the end of a report.\n         * @returns {void}\n         * @private\n         */function reportUnnecessaryBraceError(node,bodyNode,name,suffix){context.report({node:node,loc:(name!==\"else\"?node:getElseKeyword(node)).loc.start,message:\"Unnecessary { after '{{name}}'{{suffix}}.\",data:{name:name,suffix:suffix?\" \"+suffix:\"\"},fix:function fix(fixer){// `do while` expressions sometimes need a space to be inserted after `do`.\n// e.g. `do{foo()} while (bar)` should be corrected to `do foo() while (bar)`\nvar needsPrecedingSpace=node.type===\"DoWhileStatement\"&&sourceCode.getTokenBefore(bodyNode).end===bodyNode.start&&esUtils.code.isIdentifierPartES6(sourceCode.getText(bodyNode).charCodeAt(1));var openingBracket=sourceCode.getFirstToken(bodyNode);var closingBracket=sourceCode.getLastToken(bodyNode);var lastTokenInBlock=sourceCode.getTokenBefore(closingBracket);if(needsSemicolon(closingBracket)){/*\n                         * If removing braces would cause a SyntaxError due to multiple statements on the same line (or\n                         * change the semantics of the code due to ASI), don't perform a fix.\n                         */return null;}var resultingBodyText=sourceCode.getText().slice(openingBracket.range[1],lastTokenInBlock.range[0])+sourceCode.getText(lastTokenInBlock)+sourceCode.getText().slice(lastTokenInBlock.range[1],closingBracket.range[0]);return fixer.replaceText(bodyNode,(needsPrecedingSpace?\" \":\"\")+resultingBodyText);}});}/**\n         * Prepares to check the body of a node to see if it's a block statement.\n         * @param {ASTNode} node The node to report if there's a problem.\n         * @param {ASTNode} body The body node to check for blocks.\n         * @param {string} name The name to report if there's a problem.\n         * @param {string} suffix Additional string to add to the end of a report.\n         * @returns {Object} a prepared check object, with \"actual\", \"expected\", \"check\" properties.\n         *   \"actual\" will be `true` or `false` whether the body is already a block statement.\n         *   \"expected\" will be `true` or `false` if the body should be a block statement or not, or\n         *   `null` if it doesn't matter, depending on the rule options. It can be modified to change\n         *   the final behavior of \"check\".\n         *   \"check\" will be a function reporting appropriate problems depending on the other\n         *   properties.\n         */function prepareCheck(node,body,name,suffix){var hasBlock=body.type===\"BlockStatement\";var expected=null;if(node.type===\"IfStatement\"&&node.consequent===body&&requiresBraceOfConsequent(node)){expected=true;}else if(multiOnly){if(hasBlock&&body.body.length===1){expected=false;}}else if(multiLine){if(!isCollapsedOneLiner(body)){expected=true;}}else if(multiOrNest){if(hasBlock&&body.body.length===1&&isOneLiner(body.body[0])){var leadingComments=sourceCode.getComments(body.body[0]).leading;expected=leadingComments.length>0;}else if(!isOneLiner(body)){expected=true;}}else{expected=true;}return{actual:hasBlock,expected:expected,check:function check(){if(this.expected!==null&&this.expected!==this.actual){if(this.expected){reportExpectedBraceError(node,body,name,suffix);}else{reportUnnecessaryBraceError(node,body,name,suffix);}}}};}/**\n         * Prepares to check the bodies of a \"if\", \"else if\" and \"else\" chain.\n         * @param {ASTNode} node The first IfStatement node of the chain.\n         * @returns {Object[]} prepared checks for each body of the chain. See `prepareCheck` for more\n         *   information.\n         */function prepareIfChecks(node){var preparedChecks=[];do{preparedChecks.push(prepareCheck(node,node.consequent,\"if\",\"condition\"));if(node.alternate&&node.alternate.type!==\"IfStatement\"){preparedChecks.push(prepareCheck(node,node.alternate,\"else\"));break;}node=node.alternate;}while(node);if(consistent){/*\n                 * If any node should have or already have braces, make sure they\n                 * all have braces.\n                 * If all nodes shouldn't have braces, make sure they don't.\n                 */var expected=preparedChecks.some(function(preparedCheck){if(preparedCheck.expected!==null){return preparedCheck.expected;}return preparedCheck.actual;});preparedChecks.forEach(function(preparedCheck){preparedCheck.expected=expected;});}return preparedChecks;}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{IfStatement:function IfStatement(node){if(node.parent.type!==\"IfStatement\"){prepareIfChecks(node).forEach(function(preparedCheck){preparedCheck.check();});}},WhileStatement:function WhileStatement(node){prepareCheck(node,node.body,\"while\",\"condition\").check();},DoWhileStatement:function DoWhileStatement(node){prepareCheck(node,node.body,\"do\").check();},ForStatement:function ForStatement(node){prepareCheck(node,node.body,\"for\",\"condition\").check();},ForInStatement:function ForInStatement(node){prepareCheck(node,node.body,\"for-in\").check();},ForOfStatement:function ForOfStatement(node){prepareCheck(node,node.body,\"for-of\").check();}};}};},{\"../ast-utils\":605,\"esutils\":365}],642:[function(require,module,exports){/**\n * @fileoverview require default case in switch statements\n * @author Aliaksei Shytkin\n */\"use strict\";var DEFAULT_COMMENT_PATTERN=/^no default$/i;//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `default` cases in `switch` statements\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{commentPattern:{type:\"string\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var commentPattern=options.commentPattern?new RegExp(options.commentPattern):DEFAULT_COMMENT_PATTERN;var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Shortcut to get last element of array\n         * @param  {*[]} collection Array\n         * @returns {*} Last element\n         */function last(collection){return collection[collection.length-1];}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{SwitchStatement:function SwitchStatement(node){if(!node.cases.length){/*\n                     * skip check of empty switch because there is no easy way\n                     * to extract comments inside it now\n                     */return;}var hasDefault=node.cases.some(function(v){return v.test===null;});if(!hasDefault){var comment=void 0;var lastCase=last(node.cases);var comments=sourceCode.getComments(lastCase).trailing;if(comments.length){comment=last(comments);}if(!comment||!commentPattern.test(comment.value.trim())){context.report({node:node,message:\"Expected a default case.\"});}}}};}};},{}],643:[function(require,module,exports){/**\n * @fileoverview Validates newlines before and after dots\n * @author Greg Cochard\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent newlines before and after dots\",category:\"Best Practices\",recommended:false},schema:[{enum:[\"object\",\"property\"]}],fixable:\"code\"},create:function create(context){var config=context.options[0];// default to onObject if no preference is passed\nvar onObject=config===\"object\"||!config;var sourceCode=context.getSourceCode();/**\n         * Reports if the dot between object and property is on the correct loccation.\n         * @param {ASTNode} obj The object owning the property.\n         * @param {ASTNode} prop The property of the object.\n         * @param {ASTNode} node The corresponding node of the token.\n         * @returns {void}\n         */function checkDotLocation(obj,prop,node){var dot=sourceCode.getTokenBefore(prop);var textBeforeDot=sourceCode.getText().slice(obj.range[1],dot.range[0]);var textAfterDot=sourceCode.getText().slice(dot.range[1],prop.range[0]);if(dot.type===\"Punctuator\"&&dot.value===\".\"){if(onObject){if(!astUtils.isTokenOnSameLine(obj,dot)){var neededTextAfterObj=astUtils.isDecimalInteger(obj)?\" \":\"\";context.report({node:node,loc:dot.loc.start,message:\"Expected dot to be on same line as object.\",fix:function fix(fixer){return fixer.replaceTextRange([obj.range[1],prop.range[0]],neededTextAfterObj+\".\"+textBeforeDot+textAfterDot);}});}}else if(!astUtils.isTokenOnSameLine(dot,prop)){context.report({node:node,loc:dot.loc.start,message:\"Expected dot to be on same line as property.\",fix:function fix(fixer){return fixer.replaceTextRange([obj.range[1],prop.range[0]],\"\"+textBeforeDot+textAfterDot+\".\");}});}}}/**\n         * Checks the spacing of the dot within a member expression.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */function checkNode(node){checkDotLocation(node.object,node.property,node);}return{MemberExpression:checkNode};}};},{\"../ast-utils\":605}],644:[function(require,module,exports){/**\n * @fileoverview Rule to warn about using dot notation instead of square bracket notation when possible.\n * @author Josh Perez\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar validIdentifier=/^[a-zA-Z_$][a-zA-Z0-9_$]*$/;var keywords=require(\"../util/keywords\");module.exports={meta:{docs:{description:\"enforce dot notation whenever possible\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{allowKeywords:{type:\"boolean\"},allowPattern:{type:\"string\"}},additionalProperties:false}],fixable:\"code\"},create:function create(context){var options=context.options[0]||{};var allowKeywords=options.allowKeywords===void 0||!!options.allowKeywords;var sourceCode=context.getSourceCode();var allowPattern=void 0;if(options.allowPattern){allowPattern=new RegExp(options.allowPattern);}return{MemberExpression:function MemberExpression(node){if(node.computed&&node.property.type===\"Literal\"&&validIdentifier.test(node.property.value)&&(allowKeywords||keywords.indexOf(String(node.property.value))===-1)){if(!(allowPattern&&allowPattern.test(node.property.value))){context.report({node:node.property,message:\"[{{propertyValue}}] is better written in dot notation.\",data:{propertyValue:(0,_stringify4.default)(node.property.value)},fix:function fix(fixer){var leftBracket=sourceCode.getTokenAfter(node.object,astUtils.isOpeningBracketToken);var rightBracket=sourceCode.getLastToken(node);if(sourceCode.getFirstTokenBetween(leftBracket,rightBracket,{includeComments:true,filter:astUtils.isCommentToken})){// Don't perform any fixes if there are comments inside the brackets.\nreturn null;}var textBeforeDot=astUtils.isDecimalInteger(node.object)?\" \":\"\";return fixer.replaceTextRange([leftBracket.range[0],rightBracket.range[1]],textBeforeDot+\".\"+node.property.value);}});}}if(!allowKeywords&&!node.computed&&keywords.indexOf(String(node.property.name))!==-1){context.report({node:node.property,message:\".{{propertyName}} is a syntax error.\",data:{propertyName:node.property.name},fix:function fix(fixer){var dot=sourceCode.getTokenBefore(node.property);var textAfterDot=sourceCode.text.slice(dot.range[1],node.property.range[0]);if(textAfterDot.trim()){// Don't perform any fixes if there are comments between the dot and the property name.\nreturn null;}return fixer.replaceTextRange([dot.range[0],node.property.range[1]],\"[\"+textAfterDot+\"\\\"\"+node.property.name+\"\\\"]\");}});}}};}};},{\"../ast-utils\":605,\"../util/keywords\":880}],645:[function(require,module,exports){/**\n * @fileoverview Require or disallow newline at the end of files\n * @author Nodeca Team <https://github.com/nodeca>\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar lodash=require(\"lodash\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow newline at the end of files\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\",\"unix\",\"windows\"]}]},create:function create(context){//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Program:function checkBadEOF(node){var sourceCode=context.getSourceCode(),src=sourceCode.getText(),location={column:lodash.last(sourceCode.lines).length,line:sourceCode.lines.length},LF=\"\\n\",CRLF=\"\\r\"+LF,endsWithNewline=lodash.endsWith(src,LF);var mode=context.options[0]||\"always\",appendCRLF=false;if(mode===\"unix\"){// `\"unix\"` should behave exactly as `\"always\"`\nmode=\"always\";}if(mode===\"windows\"){// `\"windows\"` should behave exactly as `\"always\"`, but append CRLF in the fixer for backwards compatibility\nmode=\"always\";appendCRLF=true;}if(mode===\"always\"&&!endsWithNewline){// File is not newline-terminated, but should be\ncontext.report({node:node,loc:location,message:\"Newline required at end of file but not found.\",fix:function fix(fixer){return fixer.insertTextAfterRange([0,src.length],appendCRLF?CRLF:LF);}});}else if(mode===\"never\"&&endsWithNewline){// File is newline-terminated, but shouldn't be\ncontext.report({node:node,loc:location,message:\"Newline not allowed at end of file.\",fix:function fix(fixer){var finalEOLs=/(?:\\r?\\n)+$/,match=finalEOLs.exec(sourceCode.text),start=match.index,end=sourceCode.text.length;return fixer.replaceTextRange([start,end],\"\");}});}}};}};},{\"lodash\":566}],646:[function(require,module,exports){/**\n * @fileoverview Rule to flag statements that use != and == instead of !== and ===\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require the use of `===` and `!==`\",category:\"Best Practices\",recommended:false},schema:{anyOf:[{type:\"array\",items:[{enum:[\"always\"]},{type:\"object\",properties:{null:{enum:[\"always\",\"never\",\"ignore\"]}},additionalProperties:false}],additionalItems:false},{type:\"array\",items:[{enum:[\"smart\",\"allow-null\"]}],additionalItems:false}]},fixable:\"code\"},create:function create(context){var config=context.options[0]||\"always\";var options=context.options[1]||{};var sourceCode=context.getSourceCode();var nullOption=config===\"always\"?options.null||\"always\":\"ignore\";var enforceRuleForNull=nullOption===\"always\";var enforceInverseRuleForNull=nullOption===\"never\";/**\n         * Checks if an expression is a typeof expression\n         * @param  {ASTNode} node The node to check\n         * @returns {boolean} if the node is a typeof expression\n         */function isTypeOf(node){return node.type===\"UnaryExpression\"&&node.operator===\"typeof\";}/**\n         * Checks if either operand of a binary expression is a typeof operation\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} if one of the operands is typeof\n         * @private\n         */function isTypeOfBinary(node){return isTypeOf(node.left)||isTypeOf(node.right);}/**\n         * Checks if operands are literals of the same type (via typeof)\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} if operands are of same type\n         * @private\n         */function areLiteralsAndSameType(node){return node.left.type===\"Literal\"&&node.right.type===\"Literal\"&&_typeof(node.left.value)===_typeof(node.right.value);}/**\n         * Checks if one of the operands is a literal null\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} if operands are null\n         * @private\n         */function isNullCheck(node){return astUtils.isNullLiteral(node.right)||astUtils.isNullLiteral(node.left);}/**\n         * Gets the location (line and column) of the binary expression's operator\n         * @param {ASTNode} node The binary expression node to check\n         * @param {string} operator The operator to find\n         * @returns {Object} { line, column } location of operator\n         * @private\n         */function getOperatorLocation(node){var opToken=sourceCode.getTokenAfter(node.left);return{line:opToken.loc.start.line,column:opToken.loc.start.column};}/**\n         * Reports a message for this rule.\n         * @param {ASTNode} node The binary expression node that was checked\n         * @param {string} expectedOperator The operator that was expected (either '==', '!=', '===', or '!==')\n         * @returns {void}\n         * @private\n         */function report(node,expectedOperator){context.report({node:node,loc:getOperatorLocation(node),message:\"Expected '{{expectedOperator}}' and instead saw '{{actualOperator}}'.\",data:{expectedOperator:expectedOperator,actualOperator:node.operator},fix:function fix(fixer){// If the comparison is a `typeof` comparison or both sides are literals with the same type, then it's safe to fix.\nif(isTypeOfBinary(node)||areLiteralsAndSameType(node)){var operatorToken=sourceCode.getFirstTokenBetween(node.left,node.right,function(token){return token.value===node.operator;});return fixer.replaceText(operatorToken,expectedOperator);}return null;}});}return{BinaryExpression:function BinaryExpression(node){var isNull=isNullCheck(node);if(node.operator!==\"==\"&&node.operator!==\"!=\"){if(enforceInverseRuleForNull&&isNull){report(node,node.operator.slice(0,-1));}return;}if(config===\"smart\"&&(isTypeOfBinary(node)||areLiteralsAndSameType(node)||isNull)){return;}if(!enforceRuleForNull&&isNull){return;}report(node,node.operator+\"=\");}};}};},{\"../ast-utils\":605}],647:[function(require,module,exports){/**\n * @fileoverview Rule to control spacing within function calls\n * @author Matt DuVall <http://www.mattduvall.com>\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow spacing between function identifiers and their invocations\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:{anyOf:[{type:\"array\",items:[{enum:[\"never\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"always\"]},{type:\"object\",properties:{allowNewlines:{type:\"boolean\"}},additionalProperties:false}],minItems:0,maxItems:2}]}},create:function create(context){var never=context.options[0]!==\"always\";var allowNewlines=!never&&context.options[1]&&context.options[1].allowNewlines;var sourceCode=context.getSourceCode();var text=sourceCode.getText();/**\n         * Check if open space is present in a function name\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkSpacing(node){var lastToken=sourceCode.getLastToken(node);var lastCalleeToken=sourceCode.getLastToken(node.callee);var parenToken=sourceCode.getFirstTokenBetween(lastCalleeToken,lastToken,astUtils.isOpeningParenToken);var prevToken=parenToken&&sourceCode.getTokenBefore(parenToken);// Parens in NewExpression are optional\nif(!(parenToken&&parenToken.range[1]<node.range[1])){return;}var textBetweenTokens=text.slice(prevToken.range[1],parenToken.range[0]).replace(/\\/\\*.*?\\*\\//g,\"\");var hasWhitespace=/\\s/.test(textBetweenTokens);var hasNewline=hasWhitespace&&astUtils.LINEBREAK_MATCHER.test(textBetweenTokens);/*\n             * never allowNewlines hasWhitespace hasNewline message\n             * F     F             F             F          Missing space between function name and paren.\n             * F     F             F             T          (Invalid `!hasWhitespace && hasNewline`)\n             * F     F             T             T          Unexpected newline between function name and paren.\n             * F     F             T             F          (OK)\n             * F     T             T             F          (OK)\n             * F     T             T             T          (OK)\n             * F     T             F             T          (Invalid `!hasWhitespace && hasNewline`)\n             * F     T             F             F          Missing space between function name and paren.\n             * T     T             F             F          (Invalid `never && allowNewlines`)\n             * T     T             F             T          (Invalid `!hasWhitespace && hasNewline`)\n             * T     T             T             T          (Invalid `never && allowNewlines`)\n             * T     T             T             F          (Invalid `never && allowNewlines`)\n             * T     F             T             F          Unexpected space between function name and paren.\n             * T     F             T             T          Unexpected space between function name and paren.\n             * T     F             F             T          (Invalid `!hasWhitespace && hasNewline`)\n             * T     F             F             F          (OK)\n             *\n             * T                   T                        Unexpected space between function name and paren.\n             * F                   F                        Missing space between function name and paren.\n             * F     F                           T          Unexpected newline between function name and paren.\n             */if(never&&hasWhitespace){context.report({node:node,loc:lastCalleeToken.loc.start,message:\"Unexpected space between function name and paren.\",fix:function fix(fixer){// Only autofix if there is no newline\n// https://github.com/eslint/eslint/issues/7787\nif(!hasNewline){return fixer.removeRange([prevToken.range[1],parenToken.range[0]]);}return null;}});}else if(!never&&!hasWhitespace){context.report({node:node,loc:lastCalleeToken.loc.start,message:\"Missing space between function name and paren.\",fix:function fix(fixer){return fixer.insertTextBefore(parenToken,\" \");}});}else if(!never&&!allowNewlines&&hasNewline){context.report({node:node,loc:lastCalleeToken.loc.start,message:\"Unexpected newline between function name and paren.\",fix:function fix(fixer){return fixer.replaceTextRange([prevToken.range[1],parenToken.range[0]],\" \");}});}}return{CallExpression:checkSpacing,NewExpression:checkSpacing};}};},{\"../ast-utils\":605}],648:[function(require,module,exports){/**\n * @fileoverview Rule to require function names to match the name of the variable or property to which they are assigned.\n * @author Annie Zhang, Pavel Strashkin\n */\"use strict\";//--------------------------------------------------------------------------\n// Requirements\n//--------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var astUtils=require(\"../ast-utils\");var esutils=require(\"esutils\");//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n * Determines if a pattern is `module.exports` or `module[\"exports\"]`\n * @param {ASTNode} pattern The left side of the AssignmentExpression\n * @returns {boolean} True if the pattern is `module.exports` or `module[\"exports\"]`\n */function isModuleExports(pattern){if(pattern.type===\"MemberExpression\"&&pattern.object.type===\"Identifier\"&&pattern.object.name===\"module\"){// module.exports\nif(pattern.property.type===\"Identifier\"&&pattern.property.name===\"exports\"){return true;}// module[\"exports\"]\nif(pattern.property.type===\"Literal\"&&pattern.property.value===\"exports\"){return true;}}return false;}/**\n * Determines if a string name is a valid identifier\n * @param {string} name The string to be checked\n * @param {int} ecmaVersion The ECMAScript version if specified in the parserOptions config\n * @returns {boolean} True if the string is a valid identifier\n */function isIdentifier(name,ecmaVersion){if(ecmaVersion>=6){return esutils.keyword.isIdentifierES6(name);}return esutils.keyword.isIdentifierES5(name);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar alwaysOrNever={enum:[\"always\",\"never\"]};var optionsObject={type:\"object\",properties:{includeCommonJSModuleExports:{type:\"boolean\"}},additionalProperties:false};module.exports={meta:{docs:{description:\"require function names to match the name of the variable or property to which they are assigned\",category:\"Stylistic Issues\",recommended:false},schema:{anyOf:[{type:\"array\",additionalItems:false,items:[alwaysOrNever,optionsObject]},{type:\"array\",additionalItems:false,items:[optionsObject]}]}},create:function create(context){var options=(_typeof(context.options[0])===\"object\"?context.options[0]:context.options[1])||{};var nameMatches=typeof context.options[0]===\"string\"?context.options[0]:\"always\";var includeModuleExports=options.includeCommonJSModuleExports;var ecmaVersion=context.parserOptions&&context.parserOptions.ecmaVersion?context.parserOptions.ecmaVersion:5;/**\n         * Compares identifiers based on the nameMatches option\n         * @param {string} x the first identifier\n         * @param {string} y the second identifier\n         * @returns {boolean} whether the two identifiers should warn.\n         */function shouldWarn(x,y){return nameMatches===\"always\"&&x!==y||nameMatches===\"never\"&&x===y;}/**\n         * Reports\n         * @param {ASTNode} node The node to report\n         * @param {string} name The variable or property name\n         * @param {string} funcName The function name\n         * @param {boolean} isProp True if the reported node is a property assignment\n         * @returns {void}\n         */function report(node,name,funcName,isProp){var message=void 0;if(nameMatches===\"always\"&&isProp){message=\"Function name `{{funcName}}` should match property name `{{name}}`\";}else if(nameMatches===\"always\"){message=\"Function name `{{funcName}}` should match variable name `{{name}}`\";}else if(isProp){message=\"Function name `{{funcName}}` should not match property name `{{name}}`\";}else{message=\"Function name `{{funcName}}` should not match variable name `{{name}}`\";}context.report({node:node,message:message,data:{name:name,funcName:funcName}});}/**\n         * Determines whether a given node is a string literal\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} `true` if the node is a string literal\n         */function isStringLiteral(node){return node.type===\"Literal\"&&typeof node.value===\"string\";}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{VariableDeclarator:function VariableDeclarator(node){if(!node.init||node.init.type!==\"FunctionExpression\"||node.id.type!==\"Identifier\"){return;}if(node.init.id&&shouldWarn(node.id.name,node.init.id.name)){report(node,node.id.name,node.init.id.name,false);}},AssignmentExpression:function AssignmentExpression(node){if(node.right.type!==\"FunctionExpression\"||node.left.computed&&node.left.property.type!==\"Literal\"||!includeModuleExports&&isModuleExports(node.left)||node.left.type!==\"Identifier\"&&node.left.type!==\"MemberExpression\"){return;}var isProp=node.left.type===\"MemberExpression\";var name=isProp?astUtils.getStaticPropertyName(node.left):node.left.name;if(node.right.id&&isIdentifier(name)&&shouldWarn(name,node.right.id.name)){report(node,name,node.right.id.name,isProp);}},Property:function Property(node){if(node.value.type!==\"FunctionExpression\"||!node.value.id||node.computed&&!isStringLiteral(node.key)){return;}if(node.key.type===\"Identifier\"&&shouldWarn(node.key.name,node.value.id.name)){report(node,node.key.name,node.value.id.name,true);}else if(isStringLiteral(node.key)&&isIdentifier(node.key.value,ecmaVersion)&&shouldWarn(node.key.value,node.value.id.name)){report(node,node.key.value,node.value.id.name,true);}}};}};},{\"../ast-utils\":605,\"esutils\":365}],649:[function(require,module,exports){/**\n * @fileoverview Rule to warn when a function expression does not have a name.\n * @author Kyle T. Nunery\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");/**\n * Checks whether or not a given variable is a function name.\n * @param {escope.Variable} variable - A variable to check.\n * @returns {boolean} `true` if the variable is a function name.\n */function isFunctionName(variable){return variable&&variable.defs[0].type===\"FunctionName\";}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow named `function` expressions\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"always\",\"as-needed\",\"never\"]}]},create:function create(context){var never=context.options[0]===\"never\";var asNeeded=context.options[0]===\"as-needed\";/**\n         * Determines whether the current FunctionExpression node is a get, set, or\n         * shorthand method in an object literal or a class.\n         * @param {ASTNode} node - A node to check.\n         * @returns {boolean} True if the node is a get, set, or shorthand method.\n         */function isObjectOrClassMethod(node){var parent=node.parent;return parent.type===\"MethodDefinition\"||parent.type===\"Property\"&&(parent.method||parent.kind===\"get\"||parent.kind===\"set\");}/**\n         * Determines whether the current FunctionExpression node has a name that would be\n         * inferred from context in a conforming ES6 environment.\n         * @param {ASTNode} node - A node to check.\n         * @returns {boolean} True if the node would have a name assigned automatically.\n         */function hasInferredName(node){var parent=node.parent;return isObjectOrClassMethod(node)||parent.type===\"VariableDeclarator\"&&parent.id.type===\"Identifier\"&&parent.init===node||parent.type===\"Property\"&&parent.value===node||parent.type===\"AssignmentExpression\"&&parent.left.type===\"Identifier\"&&parent.right===node||parent.type===\"ExportDefaultDeclaration\"&&parent.declaration===node||parent.type===\"AssignmentPattern\"&&parent.right===node;}return{\"FunctionExpression:exit\":function FunctionExpressionExit(node){// Skip recursive functions.\nvar nameVar=context.getDeclaredVariables(node)[0];if(isFunctionName(nameVar)&&nameVar.references.length>0){return;}var hasName=Boolean(node.id&&node.id.name);var name=astUtils.getFunctionNameWithKind(node);if(never){if(hasName){context.report({node:node,message:\"Unexpected named {{name}}.\",data:{name:name}});}}else{if(!hasName&&(asNeeded?!hasInferredName(node):!isObjectOrClassMethod(node))){context.report({node:node,message:\"Unexpected unnamed {{name}}.\",data:{name:name}});}}}};}};},{\"../ast-utils\":605}],650:[function(require,module,exports){/**\n * @fileoverview Rule to enforce a particular function style\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce the consistent use of either `function` declarations or expressions\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"declaration\",\"expression\"]},{type:\"object\",properties:{allowArrowFunctions:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var style=context.options[0],allowArrowFunctions=context.options[1]&&context.options[1].allowArrowFunctions===true,enforceDeclarations=style===\"declaration\",stack=[];var nodesToCheck={FunctionDeclaration:function FunctionDeclaration(node){stack.push(false);if(!enforceDeclarations&&node.parent.type!==\"ExportDefaultDeclaration\"){context.report({node:node,message:\"Expected a function expression.\"});}},\"FunctionDeclaration:exit\":function FunctionDeclarationExit(){stack.pop();},FunctionExpression:function FunctionExpression(node){stack.push(false);if(enforceDeclarations&&node.parent.type===\"VariableDeclarator\"){context.report({node:node.parent,message:\"Expected a function declaration.\"});}},\"FunctionExpression:exit\":function FunctionExpressionExit(){stack.pop();},ThisExpression:function ThisExpression(){if(stack.length>0){stack[stack.length-1]=true;}}};if(!allowArrowFunctions){nodesToCheck.ArrowFunctionExpression=function(){stack.push(false);};nodesToCheck[\"ArrowFunctionExpression:exit\"]=function(node){var hasThisExpr=stack.pop();if(enforceDeclarations&&!hasThisExpr&&node.parent.type===\"VariableDeclarator\"){context.report({node:node.parent,message:\"Expected a function declaration.\"});}};}return nodesToCheck;}};},{}],651:[function(require,module,exports){/**\n * @fileoverview Rule to check the spacing around the * in generator functions.\n * @author Jamund Ferguson\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing around `*` operators in generator functions\",category:\"ECMAScript 6\",recommended:false},fixable:\"whitespace\",schema:[{oneOf:[{enum:[\"before\",\"after\",\"both\",\"neither\"]},{type:\"object\",properties:{before:{type:\"boolean\"},after:{type:\"boolean\"}},additionalProperties:false}]}]},create:function create(context){var mode=function(option){if(!option||typeof option===\"string\"){return{before:{before:true,after:false},after:{before:false,after:true},both:{before:true,after:true},neither:{before:false,after:false}}[option||\"before\"];}return option;}(context.options[0]);var sourceCode=context.getSourceCode();/**\n         * Checks if the given token is a star token or not.\n         *\n         * @param {Token} token - The token to check.\n         * @returns {boolean} `true` if the token is a star token.\n         */function isStarToken(token){return token.value===\"*\"&&token.type===\"Punctuator\";}/**\n         * Gets the generator star token of the given function node.\n         *\n         * @param {ASTNode} node - The function node to get.\n         * @returns {Token} Found star token.\n         */function getStarToken(node){return sourceCode.getFirstToken(node.parent.method||node.parent.type===\"MethodDefinition\"?node.parent:node,isStarToken);}/**\n         * Checks the spacing between two tokens before or after the star token.\n         * @param {string} side Either \"before\" or \"after\".\n         * @param {Token} leftToken `function` keyword token if side is \"before\", or\n         *     star token if side is \"after\".\n         * @param {Token} rightToken Star token if side is \"before\", or identifier\n         *     token if side is \"after\".\n         * @returns {void}\n         */function checkSpacing(side,leftToken,rightToken){if(!!(rightToken.range[0]-leftToken.range[1])!==mode[side]){var after=leftToken.value===\"*\";var spaceRequired=mode[side];var node=after?leftToken:rightToken;var type=spaceRequired?\"Missing\":\"Unexpected\";var message=\"{{type}} space {{side}} *.\";var data={type:type,side:side};context.report({node:node,message:message,data:data,fix:function fix(fixer){if(spaceRequired){if(after){return fixer.insertTextAfter(node,\" \");}return fixer.insertTextBefore(node,\" \");}return fixer.removeRange([leftToken.range[1],rightToken.range[0]]);}});}}/**\n         * Enforces the spacing around the star if node is a generator function.\n         * @param {ASTNode} node A function expression or declaration node.\n         * @returns {void}\n         */function checkFunction(node){if(!node.generator){return;}var starToken=getStarToken(node);// Only check before when preceded by `function`|`static` keyword\nvar prevToken=sourceCode.getTokenBefore(starToken);if(prevToken.value===\"function\"||prevToken.value===\"static\"){checkSpacing(\"before\",prevToken,starToken);}var nextToken=sourceCode.getTokenAfter(starToken);checkSpacing(\"after\",starToken,nextToken);}return{FunctionDeclaration:checkFunction,FunctionExpression:checkFunction};}};},{}],652:[function(require,module,exports){/**\n * @fileoverview Rule for disallowing require() outside of the top-level module context\n * @author Jamund Ferguson\n */\"use strict\";var ACCEPTABLE_PARENTS=[\"AssignmentExpression\",\"VariableDeclarator\",\"MemberExpression\",\"ExpressionStatement\",\"CallExpression\",\"ConditionalExpression\",\"Program\",\"VariableDeclaration\"];/**\n * Finds the escope reference in the given scope.\n * @param {Object} scope The scope to search.\n * @param {ASTNode} node The identifier node.\n * @returns {Reference|null} Returns the found reference or null if none were found.\n */function findReference(scope,node){var references=scope.references.filter(function(reference){return reference.identifier.range[0]===node.range[0]&&reference.identifier.range[1]===node.range[1];});/* istanbul ignore else: correctly returns null */if(references.length===1){return references[0];}return null;}/**\n * Checks if the given identifier node is shadowed in the given scope.\n * @param {Object} scope The current scope.\n * @param {ASTNode} node The identifier node to check.\n * @returns {boolean} Whether or not the name is shadowed.\n */function isShadowed(scope,node){var reference=findReference(scope,node);return reference&&reference.resolved&&reference.resolved.defs.length>0;}module.exports={meta:{docs:{description:\"require `require()` calls to be placed at top-level module scope\",category:\"Node.js and CommonJS\",recommended:false},schema:[]},create:function create(context){return{CallExpression:function CallExpression(node){var currentScope=context.getScope();if(node.callee.name===\"require\"&&!isShadowed(currentScope,node.callee)){var isGoodRequire=context.getAncestors().every(function(parent){return ACCEPTABLE_PARENTS.indexOf(parent.type)>-1;});if(!isGoodRequire){context.report({node:node,message:\"Unexpected require().\"});}}}};}};},{}],653:[function(require,module,exports){/**\n * @fileoverview Rule to flag for-in loops without if statements inside\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `for-in` loops to include an `if` statement\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{ForInStatement:function ForInStatement(node){/*\n                 * If the for-in statement has {}, then the real body is the body\n                 * of the BlockStatement. Otherwise, just use body as provided.\n                 */var body=node.body.type===\"BlockStatement\"?node.body.body[0]:node.body;if(body&&body.type!==\"IfStatement\"){context.report({node:node,message:\"The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype.\"});}}};}};},{}],654:[function(require,module,exports){/**\n * @fileoverview Ensure handling of errors when we know they exist.\n * @author Jamund Ferguson\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require error handling in callbacks\",category:\"Node.js and CommonJS\",recommended:false},schema:[{type:\"string\"}]},create:function create(context){var errorArgument=context.options[0]||\"err\";/**\n         * Checks if the given argument should be interpreted as a regexp pattern.\n         * @param {string} stringToCheck The string which should be checked.\n         * @returns {boolean} Whether or not the string should be interpreted as a pattern.\n         */function isPattern(stringToCheck){var firstChar=stringToCheck[0];return firstChar===\"^\";}/**\n         * Checks if the given name matches the configured error argument.\n         * @param {string} name The name which should be compared.\n         * @returns {boolean} Whether or not the given name matches the configured error variable name.\n         */function matchesConfiguredErrorName(name){if(isPattern(errorArgument)){var regexp=new RegExp(errorArgument);return regexp.test(name);}return name===errorArgument;}/**\n         * Get the parameters of a given function scope.\n         * @param {Object} scope The function scope.\n         * @returns {array} All parameters of the given scope.\n         */function getParameters(scope){return scope.variables.filter(function(variable){return variable.defs[0]&&variable.defs[0].type===\"Parameter\";});}/**\n         * Check to see if we're handling the error object properly.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         */function checkForError(node){var scope=context.getScope(),parameters=getParameters(scope),firstParameter=parameters[0];if(firstParameter&&matchesConfiguredErrorName(firstParameter.name)){if(firstParameter.references.length===0){context.report({node:node,message:\"Expected error to be handled.\"});}}}return{FunctionDeclaration:checkForError,FunctionExpression:checkForError,ArrowFunctionExpression:checkForError};}};},{}],655:[function(require,module,exports){/**\n * @fileoverview Rule that warns when identifier names that are\n * blacklisted in the configuration are used.\n * @author Keith Cirkel (http://keithcirkel.co.uk)\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow specified identifiers\",category:\"Stylistic Issues\",recommended:false},schema:{type:\"array\",items:{type:\"string\"},uniqueItems:true}},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar blacklist=context.options;/**\n         * Checks if a string matches the provided pattern\n         * @param {string} name The string to check.\n         * @returns {boolean} if the string is a match\n         * @private\n         */function isInvalid(name){return blacklist.indexOf(name)!==-1;}/**\n         * Verifies if we should report an error or not based on the effective\n         * parent node and the identifier name.\n         * @param {ASTNode} effectiveParent The effective parent node of the node to be reported\n         * @param {string} name The identifier name of the identifier node\n         * @returns {boolean} whether an error should be reported or not\n         */function shouldReport(effectiveParent,name){return effectiveParent.type!==\"CallExpression\"&&effectiveParent.type!==\"NewExpression\"&&isInvalid(name);}/**\n         * Reports an AST node as a rule violation.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         * @private\n         */function report(node){context.report({node:node,message:\"Identifier '{{name}}' is blacklisted.\",data:{name:node.name}});}return{Identifier:function Identifier(node){var name=node.name,effectiveParent=node.parent.type===\"MemberExpression\"?node.parent.parent:node.parent;// MemberExpressions get special rules\nif(node.parent.type===\"MemberExpression\"){// Always check object names\nif(node.parent.object.type===\"Identifier\"&&node.parent.object.name===node.name){if(isInvalid(name)){report(node);}// Report AssignmentExpressions only if they are the left side of the assignment\n}else if(effectiveParent.type===\"AssignmentExpression\"&&(effectiveParent.right.type!==\"MemberExpression\"||effectiveParent.left.type===\"MemberExpression\"&&effectiveParent.left.property.name===node.name)){if(isInvalid(name)){report(node);}}// Properties have their own rules\n}else if(node.parent.type===\"Property\"){if(shouldReport(effectiveParent,name)){report(node);}// Report anything that is a match and not a CallExpression\n}else if(shouldReport(effectiveParent,name)){report(node);}}};}};},{}],656:[function(require,module,exports){/**\n * @fileoverview Rule that warns when identifier names are shorter or longer\n * than the values provided in configuration.\n * @author Burak Yigit Kaya aka BYK\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce minimum and maximum identifier lengths\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{min:{type:\"number\"},max:{type:\"number\"},exceptions:{type:\"array\",uniqueItems:true,items:{type:\"string\"}},properties:{enum:[\"always\",\"never\"]}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var minLength=typeof options.min!==\"undefined\"?options.min:2;var maxLength=typeof options.max!==\"undefined\"?options.max:Infinity;var properties=options.properties!==\"never\";var exceptions=(options.exceptions?options.exceptions:[]).reduce(function(obj,item){obj[item]=true;return obj;},{});var SUPPORTED_EXPRESSIONS={MemberExpression:properties&&function(parent){return!parent.computed&&(// regular property assignment\nparent.parent.left===parent&&parent.parent.type===\"AssignmentExpression\"||// or the last identifier in an ObjectPattern destructuring\nparent.parent.type===\"Property\"&&parent.parent.value===parent&&parent.parent.parent.type===\"ObjectPattern\"&&parent.parent.parent.parent.left===parent.parent.parent);},AssignmentPattern:function AssignmentPattern(parent,node){return parent.left===node;},VariableDeclarator:function VariableDeclarator(parent,node){return parent.id===node;},Property:properties&&function(parent,node){return parent.key===node;},ImportDefaultSpecifier:true,RestElement:true,FunctionExpression:true,ArrowFunctionExpression:true,ClassDeclaration:true,FunctionDeclaration:true,MethodDefinition:true,CatchClause:true};return{Identifier:function Identifier(node){var name=node.name;var parent=node.parent;var isShort=name.length<minLength;var isLong=name.length>maxLength;if(!(isShort||isLong)||exceptions[name]){return;// Nothing to report\n}var isValidExpression=SUPPORTED_EXPRESSIONS[parent.type];if(isValidExpression&&(isValidExpression===true||isValidExpression(parent,node))){context.report({node:node,message:isShort?\"Identifier name '{{name}}' is too short (< {{min}}).\":\"Identifier name '{{name}}' is too long (> {{max}}).\",data:{name:name,min:minLength,max:maxLength}});}}};}};},{}],657:[function(require,module,exports){/**\n * @fileoverview Rule to flag non-matching identifiers\n * @author Matthieu Larcher\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require identifiers to match a specified regular expression\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"string\"},{type:\"object\",properties:{properties:{type:\"boolean\"}}}]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar pattern=context.options[0]||\"^.+$\",regexp=new RegExp(pattern);var options=context.options[1]||{},properties=!!options.properties,onlyDeclarations=!!options.onlyDeclarations;/**\n         * Checks if a string matches the provided pattern\n         * @param {string} name The string to check.\n         * @returns {boolean} if the string is a match\n         * @private\n         */function isInvalid(name){return!regexp.test(name);}/**\n         * Verifies if we should report an error or not based on the effective\n         * parent node and the identifier name.\n         * @param {ASTNode} effectiveParent The effective parent node of the node to be reported\n         * @param {string} name The identifier name of the identifier node\n         * @returns {boolean} whether an error should be reported or not\n         */function shouldReport(effectiveParent,name){return effectiveParent.type!==\"CallExpression\"&&effectiveParent.type!==\"NewExpression\"&&isInvalid(name);}/**\n         * Reports an AST node as a rule violation.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         * @private\n         */function report(node){context.report({node:node,message:\"Identifier '{{name}}' does not match the pattern '{{pattern}}'.\",data:{name:node.name,pattern:pattern}});}return{Identifier:function Identifier(node){var name=node.name,parent=node.parent,effectiveParent=parent.type===\"MemberExpression\"?parent.parent:parent;if(parent.type===\"MemberExpression\"){if(!properties){return;}// Always check object names\nif(parent.object.type===\"Identifier\"&&parent.object.name===name){if(isInvalid(name)){report(node);}// Report AssignmentExpressions only if they are the left side of the assignment\n}else if(effectiveParent.type===\"AssignmentExpression\"&&(effectiveParent.right.type!==\"MemberExpression\"||effectiveParent.left.type===\"MemberExpression\"&&effectiveParent.left.property.name===name)){if(isInvalid(name)){report(node);}}}else if(parent.type===\"Property\"){if(!properties||parent.key.name!==name){return;}if(shouldReport(effectiveParent,name)){report(node);}}else{var isDeclaration=effectiveParent.type===\"FunctionDeclaration\"||effectiveParent.type===\"VariableDeclarator\";if(onlyDeclarations&&!isDeclaration){return;}if(shouldReport(effectiveParent,name)){report(node);}}}};}};},{}],658:[function(require,module,exports){/**\n * @fileoverview This option sets a specific tab width for your code\n *\n * This rule has been ported and modified from nodeca.\n * @author Vitaly Puzrin\n * @author Gyandeep Singh\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent indentation\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{oneOf:[{enum:[\"tab\"]},{type:\"integer\",minimum:0}]},{type:\"object\",properties:{SwitchCase:{type:\"integer\",minimum:0},VariableDeclarator:{oneOf:[{type:\"integer\",minimum:0},{type:\"object\",properties:{var:{type:\"integer\",minimum:0},let:{type:\"integer\",minimum:0},const:{type:\"integer\",minimum:0}}}]},outerIIFEBody:{type:\"integer\",minimum:0},MemberExpression:{type:\"integer\",minimum:0},FunctionDeclaration:{type:\"object\",properties:{parameters:{oneOf:[{type:\"integer\",minimum:0},{enum:[\"first\"]}]},body:{type:\"integer\",minimum:0}}},FunctionExpression:{type:\"object\",properties:{parameters:{oneOf:[{type:\"integer\",minimum:0},{enum:[\"first\"]}]},body:{type:\"integer\",minimum:0}}},CallExpression:{type:\"object\",properties:{parameters:{oneOf:[{type:\"integer\",minimum:0},{enum:[\"first\"]}]}}},ArrayExpression:{oneOf:[{type:\"integer\",minimum:0},{enum:[\"first\"]}]},ObjectExpression:{oneOf:[{type:\"integer\",minimum:0},{enum:[\"first\"]}]}},additionalProperties:false}]},create:function create(context){var DEFAULT_VARIABLE_INDENT=1;var DEFAULT_PARAMETER_INDENT=null;// For backwards compatibility, don't check parameter indentation unless specified in the config\nvar DEFAULT_FUNCTION_BODY_INDENT=1;var indentType=\"space\";var indentSize=4;var options={SwitchCase:0,VariableDeclarator:{var:DEFAULT_VARIABLE_INDENT,let:DEFAULT_VARIABLE_INDENT,const:DEFAULT_VARIABLE_INDENT},outerIIFEBody:null,FunctionDeclaration:{parameters:DEFAULT_PARAMETER_INDENT,body:DEFAULT_FUNCTION_BODY_INDENT},FunctionExpression:{parameters:DEFAULT_PARAMETER_INDENT,body:DEFAULT_FUNCTION_BODY_INDENT},CallExpression:{arguments:DEFAULT_PARAMETER_INDENT},ArrayExpression:1,ObjectExpression:1};var sourceCode=context.getSourceCode();if(context.options.length){if(context.options[0]===\"tab\"){indentSize=1;indentType=\"tab\";}else/* istanbul ignore else : this will be caught by options validation */if(typeof context.options[0]===\"number\"){indentSize=context.options[0];indentType=\"space\";}if(context.options[1]){var opts=context.options[1];options.SwitchCase=opts.SwitchCase||0;var variableDeclaratorRules=opts.VariableDeclarator;if(typeof variableDeclaratorRules===\"number\"){options.VariableDeclarator={var:variableDeclaratorRules,let:variableDeclaratorRules,const:variableDeclaratorRules};}else if((typeof variableDeclaratorRules===\"undefined\"?\"undefined\":_typeof(variableDeclaratorRules))===\"object\"){(0,_assign4.default)(options.VariableDeclarator,variableDeclaratorRules);}if(typeof opts.outerIIFEBody===\"number\"){options.outerIIFEBody=opts.outerIIFEBody;}if(typeof opts.MemberExpression===\"number\"){options.MemberExpression=opts.MemberExpression;}if(_typeof(opts.FunctionDeclaration)===\"object\"){(0,_assign4.default)(options.FunctionDeclaration,opts.FunctionDeclaration);}if(_typeof(opts.FunctionExpression)===\"object\"){(0,_assign4.default)(options.FunctionExpression,opts.FunctionExpression);}if(_typeof(opts.CallExpression)===\"object\"){(0,_assign4.default)(options.CallExpression,opts.CallExpression);}if(typeof opts.ArrayExpression===\"number\"||typeof opts.ArrayExpression===\"string\"){options.ArrayExpression=opts.ArrayExpression;}if(typeof opts.ObjectExpression===\"number\"||typeof opts.ObjectExpression===\"string\"){options.ObjectExpression=opts.ObjectExpression;}}}var caseIndentStore={};/**\n         * Creates an error message for a line, given the expected/actual indentation.\n         * @param {int} expectedAmount The expected amount of indentation characters for this line\n         * @param {int} actualSpaces The actual number of indentation spaces that were found on this line\n         * @param {int} actualTabs The actual number of indentation tabs that were found on this line\n         * @returns {string} An error message for this line\n         */function createErrorMessage(expectedAmount,actualSpaces,actualTabs){var expectedStatement=expectedAmount+\" \"+indentType+(expectedAmount===1?\"\":\"s\");// e.g. \"2 tabs\"\nvar foundSpacesWord=\"space\"+(actualSpaces===1?\"\":\"s\");// e.g. \"space\"\nvar foundTabsWord=\"tab\"+(actualTabs===1?\"\":\"s\");// e.g. \"tabs\"\nvar foundStatement=void 0;if(actualSpaces>0&&actualTabs>0){foundStatement=actualSpaces+\" \"+foundSpacesWord+\" and \"+actualTabs+\" \"+foundTabsWord;// e.g. \"1 space and 2 tabs\"\n}else if(actualSpaces>0){// Abbreviate the message if the expected indentation is also spaces.\n// e.g. 'Expected 4 spaces but found 2' rather than 'Expected 4 spaces but found 2 spaces'\nfoundStatement=indentType===\"space\"?actualSpaces:actualSpaces+\" \"+foundSpacesWord;}else if(actualTabs>0){foundStatement=indentType===\"tab\"?actualTabs:actualTabs+\" \"+foundTabsWord;}else{foundStatement=\"0\";}return\"Expected indentation of \"+expectedStatement+\" but found \"+foundStatement+\".\";}/**\n         * Reports a given indent violation\n         * @param {ASTNode} node Node violating the indent rule\n         * @param {int} needed Expected indentation character count\n         * @param {int} gottenSpaces Indentation space count in the actual node/code\n         * @param {int} gottenTabs Indentation tab count in the actual node/code\n         * @param {Object=} loc Error line and column location\n         * @param {boolean} isLastNodeCheck Is the error for last node check\n         * @param {int} lastNodeCheckEndOffset Number of charecters to skip from the end\n         * @returns {void}\n         */function report(node,needed,gottenSpaces,gottenTabs,loc,isLastNodeCheck){if(gottenSpaces&&gottenTabs){// To avoid conflicts with `no-mixed-spaces-and-tabs`, don't report lines that have both spaces and tabs.\nreturn;}var desiredIndent=(indentType===\"space\"?\" \":\"\\t\").repeat(needed);var textRange=isLastNodeCheck?[node.range[1]-node.loc.end.column,node.range[1]-node.loc.end.column+gottenSpaces+gottenTabs]:[node.range[0]-node.loc.start.column,node.range[0]-node.loc.start.column+gottenSpaces+gottenTabs];context.report({node:node,loc:loc,message:createErrorMessage(needed,gottenSpaces,gottenTabs),fix:function fix(fixer){return fixer.replaceTextRange(textRange,desiredIndent);}});}/**\n         * Get the actual indent of node\n         * @param {ASTNode|Token} node Node to examine\n         * @param {boolean} [byLastLine=false] get indent of node's last line\n         * @param {boolean} [excludeCommas=false] skip comma on start of line\n         * @returns {Object} The node's indent. Contains keys `space` and `tab`, representing the indent of each character. Also\n         contains keys `goodChar` and `badChar`, where `goodChar` is the amount of the user's desired indentation character, and\n         `badChar` is the amount of the other indentation character.\n         */function getNodeIndent(node,byLastLine){var token=byLastLine?sourceCode.getLastToken(node):sourceCode.getFirstToken(node);var srcCharsBeforeNode=sourceCode.getText(token,token.loc.start.column).split(\"\");var indentChars=srcCharsBeforeNode.slice(0,srcCharsBeforeNode.findIndex(function(char){return char!==\" \"&&char!==\"\\t\";}));var spaces=indentChars.filter(function(char){return char===\" \";}).length;var tabs=indentChars.filter(function(char){return char===\"\\t\";}).length;return{space:spaces,tab:tabs,goodChar:indentType===\"space\"?spaces:tabs,badChar:indentType===\"space\"?tabs:spaces};}/**\n         * Checks node is the first in its own start line. By default it looks by start line.\n         * @param {ASTNode} node The node to check\n         * @param {boolean} [byEndLocation=false] Lookup based on start position or end\n         * @returns {boolean} true if its the first in the its start line\n         */function isNodeFirstInLine(node,byEndLocation){var firstToken=byEndLocation===true?sourceCode.getLastToken(node,1):sourceCode.getTokenBefore(node),startLine=byEndLocation===true?node.loc.end.line:node.loc.start.line,endLine=firstToken?firstToken.loc.end.line:-1;return startLine!==endLine;}/**\n         * Check indent for node\n         * @param {ASTNode} node Node to check\n         * @param {int} neededIndent needed indent\n         * @param {boolean} [excludeCommas=false] skip comma on start of line\n         * @returns {void}\n         */function checkNodeIndent(node,neededIndent){var actualIndent=getNodeIndent(node,false);if(node.type!==\"ArrayExpression\"&&node.type!==\"ObjectExpression\"&&(actualIndent.goodChar!==neededIndent||actualIndent.badChar!==0)&&isNodeFirstInLine(node)){report(node,neededIndent,actualIndent.space,actualIndent.tab);}if(node.type===\"IfStatement\"&&node.alternate){var elseToken=sourceCode.getTokenBefore(node.alternate);checkNodeIndent(elseToken,neededIndent);if(!isNodeFirstInLine(node.alternate)){checkNodeIndent(node.alternate,neededIndent);}}if(node.type===\"TryStatement\"&&node.handler){var catchToken=sourceCode.getFirstToken(node.handler);checkNodeIndent(catchToken,neededIndent);}if(node.type===\"TryStatement\"&&node.finalizer){var finallyToken=sourceCode.getTokenBefore(node.finalizer);checkNodeIndent(finallyToken,neededIndent);}if(node.type===\"DoWhileStatement\"){var whileToken=sourceCode.getTokenAfter(node.body);checkNodeIndent(whileToken,neededIndent);}}/**\n         * Check indent for nodes list\n         * @param {ASTNode[]} nodes list of node objects\n         * @param {int} indent needed indent\n         * @param {boolean} [excludeCommas=false] skip comma on start of line\n         * @returns {void}\n         */function checkNodesIndent(nodes,indent){nodes.forEach(function(node){return checkNodeIndent(node,indent);});}/**\n         * Check last node line indent this detects, that block closed correctly\n         * @param {ASTNode} node Node to examine\n         * @param {int} lastLineIndent needed indent\n         * @returns {void}\n         */function checkLastNodeLineIndent(node,lastLineIndent){var lastToken=sourceCode.getLastToken(node);var endIndent=getNodeIndent(lastToken,true);if((endIndent.goodChar!==lastLineIndent||endIndent.badChar!==0)&&isNodeFirstInLine(node,true)){report(node,lastLineIndent,endIndent.space,endIndent.tab,{line:lastToken.loc.start.line,column:lastToken.loc.start.column},true);}}/**\n         * Check last node line indent this detects, that block closed correctly\n         * This function for more complicated return statement case, where closing parenthesis may be followed by ';'\n         * @param {ASTNode} node Node to examine\n         * @param {int} firstLineIndent first line needed indent\n         * @returns {void}\n         */function checkLastReturnStatementLineIndent(node,firstLineIndent){// in case if return statement ends with ');' we have traverse back to ')'\n// otherwise we'll measure indent for ';' and replace ')'\nvar lastToken=sourceCode.getLastToken(node,astUtils.isClosingParenToken);var textBeforeClosingParenthesis=sourceCode.getText(lastToken,lastToken.loc.start.column).slice(0,-1);if(textBeforeClosingParenthesis.trim()){// There are tokens before the closing paren, don't report this case\nreturn;}var endIndent=getNodeIndent(lastToken,true);if(endIndent.goodChar!==firstLineIndent){report(node,firstLineIndent,endIndent.space,endIndent.tab,{line:lastToken.loc.start.line,column:lastToken.loc.start.column},true);}}/**\n         * Check first node line indent is correct\n         * @param {ASTNode} node Node to examine\n         * @param {int} firstLineIndent needed indent\n         * @returns {void}\n         */function checkFirstNodeLineIndent(node,firstLineIndent){var startIndent=getNodeIndent(node,false);if((startIndent.goodChar!==firstLineIndent||startIndent.badChar!==0)&&isNodeFirstInLine(node)){report(node,firstLineIndent,startIndent.space,startIndent.tab,{line:node.loc.start.line,column:node.loc.start.column});}}/**\n         * Returns a parent node of given node based on a specified type\n         * if not present then return null\n         * @param {ASTNode} node node to examine\n         * @param {string} type type that is being looked for\n         * @param {string} stopAtList end points for the evaluating code\n         * @returns {ASTNode|void} if found then node otherwise null\n         */function getParentNodeByType(node,type,stopAtList){var parent=node.parent;if(!stopAtList){stopAtList=[\"Program\"];}while(parent.type!==type&&stopAtList.indexOf(parent.type)===-1&&parent.type!==\"Program\"){parent=parent.parent;}return parent.type===type?parent:null;}/**\n         * Returns the VariableDeclarator based on the current node\n         * if not present then return null\n         * @param {ASTNode} node node to examine\n         * @returns {ASTNode|void} if found then node otherwise null\n         */function getVariableDeclaratorNode(node){return getParentNodeByType(node,\"VariableDeclarator\");}/**\n         * Check to see if the node is part of the multi-line variable declaration.\n         * Also if its on the same line as the varNode\n         * @param {ASTNode} node node to check\n         * @param {ASTNode} varNode variable declaration node to check against\n         * @returns {boolean} True if all the above condition satisfy\n         */function isNodeInVarOnTop(node,varNode){return varNode&&varNode.parent.loc.start.line===node.loc.start.line&&varNode.parent.declarations.length>1;}/**\n         * Check to see if the argument before the callee node is multi-line and\n         * there should only be 1 argument before the callee node\n         * @param {ASTNode} node node to check\n         * @returns {boolean} True if arguments are multi-line\n         */function isArgBeforeCalleeNodeMultiline(node){var parent=node.parent;if(parent.arguments.length>=2&&parent.arguments[1]===node){return parent.arguments[0].loc.end.line>parent.arguments[0].loc.start.line;}return false;}/**\n         * Check to see if the node is a file level IIFE\n         * @param {ASTNode} node The function node to check.\n         * @returns {boolean} True if the node is the outer IIFE\n         */function isOuterIIFE(node){var parent=node.parent;var stmt=parent.parent;/*\n             * Verify that the node is an IIEF\n             */if(parent.type!==\"CallExpression\"||parent.callee!==node){return false;}/*\n             * Navigate legal ancestors to determine whether this IIEF is outer\n             */while(stmt.type===\"UnaryExpression\"&&(stmt.operator===\"!\"||stmt.operator===\"~\"||stmt.operator===\"+\"||stmt.operator===\"-\")||stmt.type===\"AssignmentExpression\"||stmt.type===\"LogicalExpression\"||stmt.type===\"SequenceExpression\"||stmt.type===\"VariableDeclarator\"){stmt=stmt.parent;}return(stmt.type===\"ExpressionStatement\"||stmt.type===\"VariableDeclaration\")&&stmt.parent&&stmt.parent.type===\"Program\";}/**\n         * Check indent for function block content\n         * @param {ASTNode} node A BlockStatement node that is inside of a function.\n         * @returns {void}\n         */function checkIndentInFunctionBlock(node){/*\n             * Search first caller in chain.\n             * Ex.:\n             *\n             * Models <- Identifier\n             *   .User\n             *   .find()\n             *   .exec(function() {\n             *   // function body\n             * });\n             *\n             * Looks for 'Models'\n             */var calleeNode=node.parent;// FunctionExpression\nvar indent=void 0;if(calleeNode.parent&&(calleeNode.parent.type===\"Property\"||calleeNode.parent.type===\"ArrayExpression\")){// If function is part of array or object, comma can be put at left\nindent=getNodeIndent(calleeNode,false,false).goodChar;}else{// If function is standalone, simple calculate indent\nindent=getNodeIndent(calleeNode).goodChar;}if(calleeNode.parent.type===\"CallExpression\"){var calleeParent=calleeNode.parent;if(calleeNode.type!==\"FunctionExpression\"&&calleeNode.type!==\"ArrowFunctionExpression\"){if(calleeParent&&calleeParent.loc.start.line<node.loc.start.line){indent=getNodeIndent(calleeParent).goodChar;}}else{if(isArgBeforeCalleeNodeMultiline(calleeNode)&&calleeParent.callee.loc.start.line===calleeParent.callee.loc.end.line&&!isNodeFirstInLine(calleeNode)){indent=getNodeIndent(calleeParent).goodChar;}}}// function body indent should be indent + indent size, unless this\n// is a FunctionDeclaration, FunctionExpression, or outer IIFE and the corresponding options are enabled.\nvar functionOffset=indentSize;if(options.outerIIFEBody!==null&&isOuterIIFE(calleeNode)){functionOffset=options.outerIIFEBody*indentSize;}else if(calleeNode.type===\"FunctionExpression\"){functionOffset=options.FunctionExpression.body*indentSize;}else if(calleeNode.type===\"FunctionDeclaration\"){functionOffset=options.FunctionDeclaration.body*indentSize;}indent+=functionOffset;// check if the node is inside a variable\nvar parentVarNode=getVariableDeclaratorNode(node);if(parentVarNode&&isNodeInVarOnTop(node,parentVarNode)){indent+=indentSize*options.VariableDeclarator[parentVarNode.parent.kind];}if(node.body.length>0){checkNodesIndent(node.body,indent);}checkLastNodeLineIndent(node,indent-functionOffset);}/**\n         * Checks if the given node starts and ends on the same line\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} Whether or not the block starts and ends on the same line.\n         */function isSingleLineNode(node){var lastToken=sourceCode.getLastToken(node),startLine=node.loc.start.line,endLine=lastToken.loc.end.line;return startLine===endLine;}/**\n         * Check to see if the first element inside an array is an object and on the same line as the node\n         * If the node is not an array then it will return false.\n         * @param {ASTNode} node node to check\n         * @returns {boolean} success/failure\n         */function isFirstArrayElementOnSameLine(node){if(node.type===\"ArrayExpression\"&&node.elements[0]){return node.elements[0].loc.start.line===node.loc.start.line&&node.elements[0].type===\"ObjectExpression\";}return false;}/**\n         * Check indent for array block content or object block content\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */function checkIndentInArrayOrObjectBlock(node){// Skip inline\nif(isSingleLineNode(node)){return;}var elements=node.type===\"ArrayExpression\"?node.elements:node.properties;// filter out empty elements example would be [ , 2] so remove first element as espree considers it as null\nelements=elements.filter(function(elem){return elem!==null;});var nodeIndent=void 0;var elementsIndent=void 0;var parentVarNode=getVariableDeclaratorNode(node);// TODO - come up with a better strategy in future\nif(isNodeFirstInLine(node)){var parent=node.parent;nodeIndent=getNodeIndent(parent).goodChar;if(!parentVarNode||parentVarNode.loc.start.line!==node.loc.start.line){if(parent.type!==\"VariableDeclarator\"||parentVarNode===parentVarNode.parent.declarations[0]){if(parent.type===\"VariableDeclarator\"&&parentVarNode.loc.start.line===parent.loc.start.line){nodeIndent=nodeIndent+indentSize*options.VariableDeclarator[parentVarNode.parent.kind];}else if(parent.type===\"ObjectExpression\"||parent.type===\"ArrayExpression\"){var parentElements=node.parent.type===\"ObjectExpression\"?node.parent.properties:node.parent.elements;if(parentElements[0]&&parentElements[0].loc.start.line===parent.loc.start.line&&parentElements[0].loc.end.line!==parent.loc.start.line){/*\n                                 * If the first element of the array spans multiple lines, don't increase the expected indentation of the rest.\n                                 * e.g. [{\n                                 *        foo: 1\n                                 *      },\n                                 *      {\n                                 *        bar: 1\n                                 *      }]\n                                 * the second object is not indented.\n                                 */}else if(typeof options[parent.type]===\"number\"){nodeIndent+=options[parent.type]*indentSize;}else{nodeIndent=parentElements[0].loc.start.column;}}else if(parent.type===\"CallExpression\"||parent.type===\"NewExpression\"){if(typeof options.CallExpression.arguments===\"number\"){nodeIndent+=options.CallExpression.arguments*indentSize;}else if(options.CallExpression.arguments===\"first\"){if(parent.arguments.indexOf(node)!==-1){nodeIndent=parent.arguments[0].loc.start.column;}}else{nodeIndent+=indentSize;}}else if(parent.type===\"LogicalExpression\"||parent.type===\"ArrowFunctionExpression\"){nodeIndent+=indentSize;}}}else if(!parentVarNode&&!isFirstArrayElementOnSameLine(parent)&&parent.type!==\"MemberExpression\"&&parent.type!==\"ExpressionStatement\"&&parent.type!==\"AssignmentExpression\"&&parent.type!==\"Property\"){nodeIndent=nodeIndent+indentSize;}checkFirstNodeLineIndent(node,nodeIndent);}else{nodeIndent=getNodeIndent(node).goodChar;}if(options[node.type]===\"first\"){elementsIndent=elements.length?elements[0].loc.start.column:0;// If there are no elements, elementsIndent doesn't matter.\n}else{elementsIndent=nodeIndent+indentSize*options[node.type];}/*\n             * Check if the node is a multiple variable declaration; if so, then\n             * make sure indentation takes that into account.\n             */if(isNodeInVarOnTop(node,parentVarNode)){elementsIndent+=indentSize*options.VariableDeclarator[parentVarNode.parent.kind];}checkNodesIndent(elements,elementsIndent);if(elements.length>0){// Skip last block line check if last item in same line\nif(elements[elements.length-1].loc.end.line===node.loc.end.line){return;}}checkLastNodeLineIndent(node,nodeIndent+(isNodeInVarOnTop(node,parentVarNode)?options.VariableDeclarator[parentVarNode.parent.kind]*indentSize:0));}/**\n         * Check if the node or node body is a BlockStatement or not\n         * @param {ASTNode} node node to test\n         * @returns {boolean} True if it or its body is a block statement\n         */function isNodeBodyBlock(node){return node.type===\"BlockStatement\"||node.type===\"ClassBody\"||node.body&&node.body.type===\"BlockStatement\"||node.consequent&&node.consequent.type===\"BlockStatement\";}/**\n         * Check indentation for blocks\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */function blockIndentationCheck(node){// Skip inline blocks\nif(isSingleLineNode(node)){return;}if(node.parent&&(node.parent.type===\"FunctionExpression\"||node.parent.type===\"FunctionDeclaration\"||node.parent.type===\"ArrowFunctionExpression\")){checkIndentInFunctionBlock(node);return;}var indent=void 0;var nodesToCheck=[];/*\n             * For this statements we should check indent from statement beginning,\n             * not from the beginning of the block.\n             */var statementsWithProperties=[\"IfStatement\",\"WhileStatement\",\"ForStatement\",\"ForInStatement\",\"ForOfStatement\",\"DoWhileStatement\",\"ClassDeclaration\",\"TryStatement\"];if(node.parent&&statementsWithProperties.indexOf(node.parent.type)!==-1&&isNodeBodyBlock(node)){indent=getNodeIndent(node.parent).goodChar;}else if(node.parent&&node.parent.type===\"CatchClause\"){indent=getNodeIndent(node.parent.parent).goodChar;}else{indent=getNodeIndent(node).goodChar;}if(node.type===\"IfStatement\"&&node.consequent.type!==\"BlockStatement\"){nodesToCheck=[node.consequent];}else if(Array.isArray(node.body)){nodesToCheck=node.body;}else{nodesToCheck=[node.body];}if(nodesToCheck.length>0){checkNodesIndent(nodesToCheck,indent+indentSize);}if(node.type===\"BlockStatement\"){checkLastNodeLineIndent(node,indent);}}/**\n         * Filter out the elements which are on the same line of each other or the node.\n         * basically have only 1 elements from each line except the variable declaration line.\n         * @param {ASTNode} node Variable declaration node\n         * @returns {ASTNode[]} Filtered elements\n         */function filterOutSameLineVars(node){return node.declarations.reduce(function(finalCollection,elem){var lastElem=finalCollection[finalCollection.length-1];if(elem.loc.start.line!==node.loc.start.line&&!lastElem||lastElem&&lastElem.loc.start.line!==elem.loc.start.line){finalCollection.push(elem);}return finalCollection;},[]);}/**\n         * Check indentation for variable declarations\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */function checkIndentInVariableDeclarations(node){var elements=filterOutSameLineVars(node);var nodeIndent=getNodeIndent(node).goodChar;var lastElement=elements[elements.length-1];var elementsIndent=nodeIndent+indentSize*options.VariableDeclarator[node.kind];checkNodesIndent(elements,elementsIndent);// Only check the last line if there is any token after the last item\nif(sourceCode.getLastToken(node).loc.end.line<=lastElement.loc.end.line){return;}var tokenBeforeLastElement=sourceCode.getTokenBefore(lastElement);if(tokenBeforeLastElement.value===\",\"){// Special case for comma-first syntax where the semicolon is indented\ncheckLastNodeLineIndent(node,getNodeIndent(tokenBeforeLastElement).goodChar);}else{checkLastNodeLineIndent(node,elementsIndent-indentSize);}}/**\n         * Check and decide whether to check for indentation for blockless nodes\n         * Scenarios are for or while statements without braces around them\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */function blockLessNodes(node){if(node.body.type!==\"BlockStatement\"){blockIndentationCheck(node);}}/**\n         * Returns the expected indentation for the case statement\n         * @param {ASTNode} node node to examine\n         * @param {int} [switchIndent] indent for switch statement\n         * @returns {int} indent size\n         */function expectedCaseIndent(node,switchIndent){var switchNode=node.type===\"SwitchStatement\"?node:node.parent;var caseIndent=void 0;if(caseIndentStore[switchNode.loc.start.line]){return caseIndentStore[switchNode.loc.start.line];}if(typeof switchIndent===\"undefined\"){switchIndent=getNodeIndent(switchNode).goodChar;}if(switchNode.cases.length>0&&options.SwitchCase===0){caseIndent=switchIndent;}else{caseIndent=switchIndent+indentSize*options.SwitchCase;}caseIndentStore[switchNode.loc.start.line]=caseIndent;return caseIndent;}/**\n         * Checks wether a return statement is wrapped in ()\n         * @param {ASTNode} node node to examine\n         * @returns {boolean} the result\n         */function isWrappedInParenthesis(node){var regex=/^return\\s*?\\(\\s*?\\);*?/;var statementWithoutArgument=sourceCode.getText(node).replace(sourceCode.getText(node.argument),\"\");return regex.test(statementWithoutArgument);}return{Program:function Program(node){if(node.body.length>0){// Root nodes should have no indent\ncheckNodesIndent(node.body,getNodeIndent(node).goodChar);}},ClassBody:blockIndentationCheck,BlockStatement:blockIndentationCheck,WhileStatement:blockLessNodes,ForStatement:blockLessNodes,ForInStatement:blockLessNodes,ForOfStatement:blockLessNodes,DoWhileStatement:blockLessNodes,IfStatement:function IfStatement(node){if(node.consequent.type!==\"BlockStatement\"&&node.consequent.loc.start.line>node.loc.start.line){blockIndentationCheck(node);}},VariableDeclaration:function VariableDeclaration(node){if(node.declarations[node.declarations.length-1].loc.start.line>node.declarations[0].loc.start.line){checkIndentInVariableDeclarations(node);}},ObjectExpression:function ObjectExpression(node){checkIndentInArrayOrObjectBlock(node);},ArrayExpression:function ArrayExpression(node){checkIndentInArrayOrObjectBlock(node);},MemberExpression:function MemberExpression(node){if(typeof options.MemberExpression===\"undefined\"){return;}if(isSingleLineNode(node)){return;}// The typical layout of variable declarations and assignments\n// alter the expectation of correct indentation. Skip them.\n// TODO: Add appropriate configuration options for variable\n// declarations and assignments.\nif(getParentNodeByType(node,\"VariableDeclarator\",[\"FunctionExpression\",\"ArrowFunctionExpression\"])){return;}if(getParentNodeByType(node,\"AssignmentExpression\",[\"FunctionExpression\"])){return;}var propertyIndent=getNodeIndent(node).goodChar+indentSize*options.MemberExpression;var checkNodes=[node.property];var dot=context.getTokenBefore(node.property);if(dot.type===\"Punctuator\"&&dot.value===\".\"){checkNodes.push(dot);}checkNodesIndent(checkNodes,propertyIndent);},SwitchStatement:function SwitchStatement(node){// Switch is not a 'BlockStatement'\nvar switchIndent=getNodeIndent(node).goodChar;var caseIndent=expectedCaseIndent(node,switchIndent);checkNodesIndent(node.cases,caseIndent);checkLastNodeLineIndent(node,switchIndent);},SwitchCase:function SwitchCase(node){// Skip inline cases\nif(isSingleLineNode(node)){return;}var caseIndent=expectedCaseIndent(node);checkNodesIndent(node.consequent,caseIndent+indentSize);},FunctionDeclaration:function FunctionDeclaration(node){if(isSingleLineNode(node)){return;}if(options.FunctionDeclaration.parameters===\"first\"&&node.params.length){checkNodesIndent(node.params.slice(1),node.params[0].loc.start.column);}else if(options.FunctionDeclaration.parameters!==null){checkNodesIndent(node.params,getNodeIndent(node).goodChar+indentSize*options.FunctionDeclaration.parameters);}},FunctionExpression:function FunctionExpression(node){if(isSingleLineNode(node)){return;}if(options.FunctionExpression.parameters===\"first\"&&node.params.length){checkNodesIndent(node.params.slice(1),node.params[0].loc.start.column);}else if(options.FunctionExpression.parameters!==null){checkNodesIndent(node.params,getNodeIndent(node).goodChar+indentSize*options.FunctionExpression.parameters);}},ReturnStatement:function ReturnStatement(node){if(isSingleLineNode(node)){return;}var firstLineIndent=getNodeIndent(node).goodChar;// in case if return statement is wrapped in parenthesis\nif(isWrappedInParenthesis(node)){checkLastReturnStatementLineIndent(node,firstLineIndent);}else{checkNodeIndent(node,firstLineIndent);}},CallExpression:function CallExpression(node){if(isSingleLineNode(node)){return;}if(options.CallExpression.arguments===\"first\"&&node.arguments.length){checkNodesIndent(node.arguments.slice(1),node.arguments[0].loc.start.column);}else if(options.CallExpression.arguments!==null){checkNodesIndent(node.arguments,getNodeIndent(node).goodChar+indentSize*options.CallExpression.arguments);}}};}};},{\"../ast-utils\":605}],659:[function(require,module,exports){/**\n * @fileoverview A rule to control the style of variable initializations.\n * @author Colin Ihrig\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given node is a for loop.\n * @param {ASTNode} block - A node to check.\n * @returns {boolean} `true` when the node is a for loop.\n */function isForLoop(block){return block.type===\"ForInStatement\"||block.type===\"ForOfStatement\"||block.type===\"ForStatement\";}/**\n * Checks whether or not a given declarator node has its initializer.\n * @param {ASTNode} node - A declarator node to check.\n * @returns {boolean} `true` when the node has its initializer.\n */function isInitialized(node){var declaration=node.parent;var block=declaration.parent;if(isForLoop(block)){if(block.type===\"ForStatement\"){return block.init===declaration;}return block.left===declaration;}return Boolean(node.init);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow initialization in variable declarations\",category:\"Variables\",recommended:false},schema:{anyOf:[{type:\"array\",items:[{enum:[\"always\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"never\"]},{type:\"object\",properties:{ignoreForLoopInit:{type:\"boolean\"}},additionalProperties:false}],minItems:0,maxItems:2}]}},create:function create(context){var MODE_ALWAYS=\"always\",MODE_NEVER=\"never\";var mode=context.options[0]||MODE_ALWAYS;var params=context.options[1]||{};//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{\"VariableDeclaration:exit\":function VariableDeclarationExit(node){var kind=node.kind,declarations=node.declarations;for(var i=0;i<declarations.length;++i){var declaration=declarations[i],id=declaration.id,initialized=isInitialized(declaration),isIgnoredForLoop=params.ignoreForLoopInit&&isForLoop(node.parent);if(id.type!==\"Identifier\"){continue;}if(mode===MODE_ALWAYS&&!initialized){context.report({node:declaration,message:\"Variable '{{idName}}' should be initialized on declaration.\",data:{idName:id.name}});}else if(mode===MODE_NEVER&&kind!==\"const\"&&initialized&&!isIgnoredForLoop){context.report({node:declaration,message:\"Variable '{{idName}}' should not be initialized on declaration.\",data:{idName:id.name}});}}}};}};},{}],660:[function(require,module,exports){/**\n * @fileoverview A rule to ensure consistent quotes used in jsx syntax.\n * @author Mathias Schreck <https://github.com/lo1tuma>\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\nvar QUOTE_SETTINGS={\"prefer-double\":{quote:\"\\\"\",description:\"singlequote\",convert:function convert(str){return str.replace(/'/g,\"\\\"\");}},\"prefer-single\":{quote:\"'\",description:\"doublequote\",convert:function convert(str){return str.replace(/\"/g,\"'\");}}};//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce the consistent use of either double or single quotes in JSX attributes\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"prefer-single\",\"prefer-double\"]}]},create:function create(context){var quoteOption=context.options[0]||\"prefer-double\",setting=QUOTE_SETTINGS[quoteOption];/**\n         * Checks if the given string literal node uses the expected quotes\n         * @param {ASTNode} node - A string literal node.\n         * @returns {boolean} Whether or not the string literal used the expected quotes.\n         * @public\n         */function usesExpectedQuotes(node){return node.value.indexOf(setting.quote)!==-1||astUtils.isSurroundedBy(node.raw,setting.quote);}return{JSXAttribute:function JSXAttribute(node){var attributeValue=node.value;if(attributeValue&&astUtils.isStringLiteral(attributeValue)&&!usesExpectedQuotes(attributeValue)){context.report({node:attributeValue,message:\"Unexpected usage of {{description}}.\",data:{description:setting.description},fix:function fix(fixer){return fixer.replaceText(attributeValue,setting.convert(attributeValue.raw));}});}}};}};},{\"../ast-utils\":605}],661:[function(require,module,exports){/**\n * @fileoverview Rule to specify spacing of object literal keys and values\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether a string contains a line terminator as defined in\n * http://www.ecma-international.org/ecma-262/5.1/#sec-7.3\n * @param {string} str String to test.\n * @returns {boolean} True if str contains a line terminator.\n */function containsLineTerminator(str){return astUtils.LINEBREAK_MATCHER.test(str);}/**\n * Gets the last element of an array.\n * @param {Array} arr An array.\n * @returns {any} Last element of arr.\n */function last(arr){return arr[arr.length-1];}/**\n * Checks whether a property is a member of the property group it follows.\n * @param {ASTNode} lastMember The last Property known to be in the group.\n * @param {ASTNode} candidate The next Property that might be in the group.\n * @returns {boolean} True if the candidate property is part of the group.\n */function continuesPropertyGroup(lastMember,candidate){var groupEndLine=lastMember.loc.start.line,candidateStartLine=candidate.loc.start.line;if(candidateStartLine-groupEndLine<=1){return true;}// Check that the first comment is adjacent to the end of the group, the\n// last comment is adjacent to the candidate property, and that successive\n// comments are adjacent to each other.\nvar comments=candidate.leadingComments;if(comments&&comments[0].loc.start.line-groupEndLine<=1&&candidateStartLine-last(comments).loc.end.line<=1){for(var i=1;i<comments.length;i++){if(comments[i].loc.start.line-comments[i-1].loc.end.line>1){return false;}}return true;}return false;}/**\n * Checks whether a node is contained on a single line.\n * @param {ASTNode} node AST Node being evaluated.\n * @returns {boolean} True if the node is a single line.\n */function isSingleLine(node){return node.loc.end.line===node.loc.start.line;}/**\n * Initializes a single option property from the configuration with defaults for undefined values\n * @param {Object} toOptions Object to be initialized\n * @param {Object} fromOptions Object to be initialized from\n * @returns {Object} The object with correctly initialized options and values\n */function initOptionProperty(toOptions,fromOptions){toOptions.mode=fromOptions.mode||\"strict\";// Set value of beforeColon\nif(typeof fromOptions.beforeColon!==\"undefined\"){toOptions.beforeColon=+fromOptions.beforeColon;}else{toOptions.beforeColon=0;}// Set value of afterColon\nif(typeof fromOptions.afterColon!==\"undefined\"){toOptions.afterColon=+fromOptions.afterColon;}else{toOptions.afterColon=1;}// Set align if exists\nif(typeof fromOptions.align!==\"undefined\"){if(_typeof(fromOptions.align)===\"object\"){toOptions.align=fromOptions.align;}else{// \"string\"\ntoOptions.align={on:fromOptions.align,mode:toOptions.mode,beforeColon:toOptions.beforeColon,afterColon:toOptions.afterColon};}}return toOptions;}/**\n * Initializes all the option values (singleLine, multiLine and align) from the configuration with defaults for undefined values\n * @param {Object} toOptions Object to be initialized\n * @param {Object} fromOptions Object to be initialized from\n * @returns {Object} The object with correctly initialized options and values\n */function initOptions(toOptions,fromOptions){if(_typeof(fromOptions.align)===\"object\"){// Initialize the alignment configuration\ntoOptions.align=initOptionProperty({},fromOptions.align);toOptions.align.on=fromOptions.align.on||\"colon\";toOptions.align.mode=fromOptions.align.mode||\"strict\";toOptions.multiLine=initOptionProperty({},fromOptions.multiLine||fromOptions);toOptions.singleLine=initOptionProperty({},fromOptions.singleLine||fromOptions);}else{// string or undefined\ntoOptions.multiLine=initOptionProperty({},fromOptions.multiLine||fromOptions);toOptions.singleLine=initOptionProperty({},fromOptions.singleLine||fromOptions);// If alignment options are defined in multiLine, pull them out into the general align configuration\nif(toOptions.multiLine.align){toOptions.align={on:toOptions.multiLine.align.on,mode:toOptions.multiLine.align.mode||toOptions.multiLine.mode,beforeColon:toOptions.multiLine.align.beforeColon,afterColon:toOptions.multiLine.align.afterColon};}}return toOptions;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar messages={key:\"{{error}} space after {{computed}}key '{{key}}'.\",value:\"{{error}} space before value for {{computed}}key '{{key}}'.\"};module.exports={meta:{docs:{description:\"enforce consistent spacing between keys and values in object literal properties\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{anyOf:[{type:\"object\",properties:{align:{anyOf:[{enum:[\"colon\",\"value\"]},{type:\"object\",properties:{mode:{enum:[\"strict\",\"minimum\"]},on:{enum:[\"colon\",\"value\"]},beforeColon:{type:\"boolean\"},afterColon:{type:\"boolean\"}},additionalProperties:false}]},mode:{enum:[\"strict\",\"minimum\"]},beforeColon:{type:\"boolean\"},afterColon:{type:\"boolean\"}},additionalProperties:false},{type:\"object\",properties:{singleLine:{type:\"object\",properties:{mode:{enum:[\"strict\",\"minimum\"]},beforeColon:{type:\"boolean\"},afterColon:{type:\"boolean\"}},additionalProperties:false},multiLine:{type:\"object\",properties:{align:{anyOf:[{enum:[\"colon\",\"value\"]},{type:\"object\",properties:{mode:{enum:[\"strict\",\"minimum\"]},on:{enum:[\"colon\",\"value\"]},beforeColon:{type:\"boolean\"},afterColon:{type:\"boolean\"}},additionalProperties:false}]},mode:{enum:[\"strict\",\"minimum\"]},beforeColon:{type:\"boolean\"},afterColon:{type:\"boolean\"}},additionalProperties:false}},additionalProperties:false},{type:\"object\",properties:{singleLine:{type:\"object\",properties:{mode:{enum:[\"strict\",\"minimum\"]},beforeColon:{type:\"boolean\"},afterColon:{type:\"boolean\"}},additionalProperties:false},multiLine:{type:\"object\",properties:{mode:{enum:[\"strict\",\"minimum\"]},beforeColon:{type:\"boolean\"},afterColon:{type:\"boolean\"}},additionalProperties:false},align:{type:\"object\",properties:{mode:{enum:[\"strict\",\"minimum\"]},on:{enum:[\"colon\",\"value\"]},beforeColon:{type:\"boolean\"},afterColon:{type:\"boolean\"}},additionalProperties:false}},additionalProperties:false}]}]},create:function create(context){/**\n         * OPTIONS\n         * \"key-spacing\": [2, {\n         *     beforeColon: false,\n         *     afterColon: true,\n         *     align: \"colon\" // Optional, or \"value\"\n         * }\n         */var options=context.options[0]||{},ruleOptions=initOptions({},options),multiLineOptions=ruleOptions.multiLine,singleLineOptions=ruleOptions.singleLine,alignmentOptions=ruleOptions.align||null;var sourceCode=context.getSourceCode();/**\n         * Determines if the given property is key-value property.\n         * @param {ASTNode} property Property node to check.\n         * @returns {boolean} Whether the property is a key-value property.\n         */function isKeyValueProperty(property){return!(property.method||property.shorthand||property.kind!==\"init\"||property.type!==\"Property\");}/**\n         * Starting from the given a node (a property.key node here) looks forward\n         * until it finds the last token before a colon punctuator and returns it.\n         * @param {ASTNode} node The node to start looking from.\n         * @returns {ASTNode} The last token before a colon punctuator.\n         */function getLastTokenBeforeColon(node){var colonToken=sourceCode.getTokenAfter(node,astUtils.isColonToken);return sourceCode.getTokenBefore(colonToken);}/**\n         * Starting from the given a node (a property.key node here) looks forward\n         * until it finds the colon punctuator and returns it.\n         * @param {ASTNode} node The node to start looking from.\n         * @returns {ASTNode} The colon punctuator.\n         */function getNextColon(node){return sourceCode.getTokenAfter(node,astUtils.isColonToken);}/**\n         * Gets an object literal property's key as the identifier name or string value.\n         * @param {ASTNode} property Property node whose key to retrieve.\n         * @returns {string} The property's key.\n         */function getKey(property){var key=property.key;if(property.computed){return sourceCode.getText().slice(key.range[0],key.range[1]);}return property.key.name||property.key.value;}/**\n         * Reports an appropriately-formatted error if spacing is incorrect on one\n         * side of the colon.\n         * @param {ASTNode} property Key-value pair in an object literal.\n         * @param {string} side Side being verified - either \"key\" or \"value\".\n         * @param {string} whitespace Actual whitespace string.\n         * @param {int} expected Expected whitespace length.\n         * @param {string} mode Value of the mode as \"strict\" or \"minimum\"\n         * @returns {void}\n         */function report(property,side,whitespace,expected,mode){var diff=whitespace.length-expected,nextColon=getNextColon(property.key),tokenBeforeColon=sourceCode.getTokenBefore(nextColon,{includeComments:true}),tokenAfterColon=sourceCode.getTokenAfter(nextColon,{includeComments:true}),isKeySide=side===\"key\",locStart=isKeySide?tokenBeforeColon.loc.start:tokenAfterColon.loc.start,isExtra=diff>0,diffAbs=Math.abs(diff),spaces=Array(diffAbs+1).join(\" \");var fix=void 0;if((diff&&mode===\"strict\"||diff<0&&mode===\"minimum\"||diff>0&&!expected&&mode===\"minimum\")&&!(expected&&containsLineTerminator(whitespace))){if(isExtra){var range=void 0;// Remove whitespace\nif(isKeySide){range=[tokenBeforeColon.end,tokenBeforeColon.end+diffAbs];}else{range=[tokenAfterColon.start-diffAbs,tokenAfterColon.start];}fix=function fix(fixer){return fixer.removeRange(range);};}else{// Add whitespace\nif(isKeySide){fix=function fix(fixer){return fixer.insertTextAfter(tokenBeforeColon,spaces);};}else{fix=function fix(fixer){return fixer.insertTextBefore(tokenAfterColon,spaces);};}}context.report({node:property[side],loc:locStart,message:messages[side],data:{error:isExtra?\"Extra\":\"Missing\",computed:property.computed?\"computed \":\"\",key:getKey(property)},fix:fix});}}/**\n         * Gets the number of characters in a key, including quotes around string\n         * keys and braces around computed property keys.\n         * @param {ASTNode} property Property of on object literal.\n         * @returns {int} Width of the key.\n         */function getKeyWidth(property){var startToken=sourceCode.getFirstToken(property);var endToken=getLastTokenBeforeColon(property.key);return endToken.range[1]-startToken.range[0];}/**\n         * Gets the whitespace around the colon in an object literal property.\n         * @param {ASTNode} property Property node from an object literal.\n         * @returns {Object} Whitespace before and after the property's colon.\n         */function getPropertyWhitespace(property){var whitespace=/(\\s*):(\\s*)/.exec(sourceCode.getText().slice(property.key.range[1],property.value.range[0]));if(whitespace){return{beforeColon:whitespace[1],afterColon:whitespace[2]};}return null;}/**\n         * Creates groups of properties.\n         * @param  {ASTNode} node ObjectExpression node being evaluated.\n         * @returns {Array.<ASTNode[]>} Groups of property AST node lists.\n         */function createGroups(node){if(node.properties.length===1){return[node.properties];}return node.properties.reduce(function(groups,property){var currentGroup=last(groups),prev=last(currentGroup);if(!prev||continuesPropertyGroup(prev,property)){currentGroup.push(property);}else{groups.push([property]);}return groups;},[[]]);}/**\n         * Verifies correct vertical alignment of a group of properties.\n         * @param {ASTNode[]} properties List of Property AST nodes.\n         * @returns {void}\n         */function verifyGroupAlignment(properties){var length=properties.length,widths=properties.map(getKeyWidth),// Width of keys, including quotes\nalign=alignmentOptions.on;// \"value\" or \"colon\"\nvar targetWidth=Math.max.apply(null,widths),beforeColon=void 0,afterColon=void 0,mode=void 0;if(alignmentOptions&&length>1){// When aligning values within a group, use the alignment configuration.\nbeforeColon=alignmentOptions.beforeColon;afterColon=alignmentOptions.afterColon;mode=alignmentOptions.mode;}else{beforeColon=multiLineOptions.beforeColon;afterColon=multiLineOptions.afterColon;mode=alignmentOptions.mode;}// Conditionally include one space before or after colon\ntargetWidth+=align===\"colon\"?beforeColon:afterColon;for(var i=0;i<length;i++){var property=properties[i];var whitespace=getPropertyWhitespace(property);if(whitespace){// Object literal getters/setters lack a colon\nvar width=widths[i];if(align===\"value\"){report(property,\"key\",whitespace.beforeColon,beforeColon,mode);report(property,\"value\",whitespace.afterColon,targetWidth-width,mode);}else{// align = \"colon\"\nreport(property,\"key\",whitespace.beforeColon,targetWidth-width,mode);report(property,\"value\",whitespace.afterColon,afterColon,mode);}}}}/**\n         * Verifies vertical alignment, taking into account groups of properties.\n         * @param  {ASTNode} node ObjectExpression node being evaluated.\n         * @returns {void}\n         */function verifyAlignment(node){createGroups(node).forEach(function(group){verifyGroupAlignment(group.filter(isKeyValueProperty));});}/**\n         * Verifies spacing of property conforms to specified options.\n         * @param  {ASTNode} node Property node being evaluated.\n         * @param {Object} lineOptions Configured singleLine or multiLine options\n         * @returns {void}\n         */function verifySpacing(node,lineOptions){var actual=getPropertyWhitespace(node);if(actual){// Object literal getters/setters lack colons\nreport(node,\"key\",actual.beforeColon,lineOptions.beforeColon,lineOptions.mode);report(node,\"value\",actual.afterColon,lineOptions.afterColon,lineOptions.mode);}}/**\n         * Verifies spacing of each property in a list.\n         * @param  {ASTNode[]} properties List of Property AST nodes.\n         * @returns {void}\n         */function verifyListSpacing(properties){var length=properties.length;for(var i=0;i<length;i++){verifySpacing(properties[i],singleLineOptions);}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nif(alignmentOptions){// Verify vertical alignment\nreturn{ObjectExpression:function ObjectExpression(node){if(isSingleLine(node)){verifyListSpacing(node.properties.filter(isKeyValueProperty));}else{verifyAlignment(node);}}};}// Obey beforeColon and afterColon in each property as configured\nreturn{Property:function Property(node){verifySpacing(node,isSingleLine(node.parent)?singleLineOptions:multiLineOptions);}};}};},{\"../ast-utils\":605}],662:[function(require,module,exports){/**\n * @fileoverview Rule to enforce spacing before and after keywords.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\"),keywords=require(\"../util/keywords\");//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\nvar PREV_TOKEN=/^[)\\]}>]$/;var NEXT_TOKEN=/^(?:[([{<~!]|\\+\\+?|--?)$/;var PREV_TOKEN_M=/^[)\\]}>*]$/;var NEXT_TOKEN_M=/^[{*]$/;var TEMPLATE_OPEN_PAREN=/\\$\\{$/;var TEMPLATE_CLOSE_PAREN=/^\\}/;var CHECK_TYPE=/^(?:JSXElement|RegularExpression|String|Template)$/;var KEYS=keywords.concat([\"as\",\"async\",\"await\",\"from\",\"get\",\"let\",\"of\",\"set\",\"yield\"]);// check duplications.\n(function(){KEYS.sort();for(var i=1;i<KEYS.length;++i){if(KEYS[i]===KEYS[i-1]){throw new Error(\"Duplication was found in the keyword list: \"+KEYS[i]);}}})();//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given token is a \"Template\" token ends with \"${\".\n *\n * @param {Token} token - A token to check.\n * @returns {boolean} `true` if the token is a \"Template\" token ends with \"${\".\n */function isOpenParenOfTemplate(token){return token.type===\"Template\"&&TEMPLATE_OPEN_PAREN.test(token.value);}/**\n * Checks whether or not a given token is a \"Template\" token starts with \"}\".\n *\n * @param {Token} token - A token to check.\n * @returns {boolean} `true` if the token is a \"Template\" token starts with \"}\".\n */function isCloseParenOfTemplate(token){return token.type===\"Template\"&&TEMPLATE_CLOSE_PAREN.test(token.value);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing before and after keywords\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{before:{type:\"boolean\"},after:{type:\"boolean\"},overrides:{type:\"object\",properties:KEYS.reduce(function(retv,key){retv[key]={type:\"object\",properties:{before:{type:\"boolean\"},after:{type:\"boolean\"}},additionalProperties:false};return retv;},{}),additionalProperties:false}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();/**\n         * Reports a given token if there are not space(s) before the token.\n         *\n         * @param {Token} token - A token to report.\n         * @param {RegExp|undefined} pattern - Optional. A pattern of the previous\n         *      token to check.\n         * @returns {void}\n         */function expectSpaceBefore(token,pattern){pattern=pattern||PREV_TOKEN;var prevToken=sourceCode.getTokenBefore(token);if(prevToken&&(CHECK_TYPE.test(prevToken.type)||pattern.test(prevToken.value))&&!isOpenParenOfTemplate(prevToken)&&astUtils.isTokenOnSameLine(prevToken,token)&&!sourceCode.isSpaceBetweenTokens(prevToken,token)){context.report({loc:token.loc.start,message:\"Expected space(s) before \\\"{{value}}\\\".\",data:token,fix:function fix(fixer){return fixer.insertTextBefore(token,\" \");}});}}/**\n         * Reports a given token if there are space(s) before the token.\n         *\n         * @param {Token} token - A token to report.\n         * @param {RegExp|undefined} pattern - Optional. A pattern of the previous\n         *      token to check.\n         * @returns {void}\n         */function unexpectSpaceBefore(token,pattern){pattern=pattern||PREV_TOKEN;var prevToken=sourceCode.getTokenBefore(token);if(prevToken&&(CHECK_TYPE.test(prevToken.type)||pattern.test(prevToken.value))&&!isOpenParenOfTemplate(prevToken)&&astUtils.isTokenOnSameLine(prevToken,token)&&sourceCode.isSpaceBetweenTokens(prevToken,token)){context.report({loc:token.loc.start,message:\"Unexpected space(s) before \\\"{{value}}\\\".\",data:token,fix:function fix(fixer){return fixer.removeRange([prevToken.range[1],token.range[0]]);}});}}/**\n         * Reports a given token if there are not space(s) after the token.\n         *\n         * @param {Token} token - A token to report.\n         * @param {RegExp|undefined} pattern - Optional. A pattern of the next\n         *      token to check.\n         * @returns {void}\n         */function expectSpaceAfter(token,pattern){pattern=pattern||NEXT_TOKEN;var nextToken=sourceCode.getTokenAfter(token);if(nextToken&&(CHECK_TYPE.test(nextToken.type)||pattern.test(nextToken.value))&&!isCloseParenOfTemplate(nextToken)&&astUtils.isTokenOnSameLine(token,nextToken)&&!sourceCode.isSpaceBetweenTokens(token,nextToken)){context.report({loc:token.loc.start,message:\"Expected space(s) after \\\"{{value}}\\\".\",data:token,fix:function fix(fixer){return fixer.insertTextAfter(token,\" \");}});}}/**\n         * Reports a given token if there are space(s) after the token.\n         *\n         * @param {Token} token - A token to report.\n         * @param {RegExp|undefined} pattern - Optional. A pattern of the next\n         *      token to check.\n         * @returns {void}\n         */function unexpectSpaceAfter(token,pattern){pattern=pattern||NEXT_TOKEN;var nextToken=sourceCode.getTokenAfter(token);if(nextToken&&(CHECK_TYPE.test(nextToken.type)||pattern.test(nextToken.value))&&!isCloseParenOfTemplate(nextToken)&&astUtils.isTokenOnSameLine(token,nextToken)&&sourceCode.isSpaceBetweenTokens(token,nextToken)){context.report({loc:token.loc.start,message:\"Unexpected space(s) after \\\"{{value}}\\\".\",data:token,fix:function fix(fixer){return fixer.removeRange([token.range[1],nextToken.range[0]]);}});}}/**\n         * Parses the option object and determines check methods for each keyword.\n         *\n         * @param {Object|undefined} options - The option object to parse.\n         * @returns {Object} - Normalized option object.\n         *      Keys are keywords (there are for every keyword).\n         *      Values are instances of `{\"before\": function, \"after\": function}`.\n         */function parseOptions(options){var before=!options||options.before!==false;var after=!options||options.after!==false;var defaultValue={before:before?expectSpaceBefore:unexpectSpaceBefore,after:after?expectSpaceAfter:unexpectSpaceAfter};var overrides=options&&options.overrides||{};var retv=(0,_create4.default)(null);for(var i=0;i<KEYS.length;++i){var key=KEYS[i];var override=overrides[key];if(override){var thisBefore=\"before\"in override?override.before:before;var thisAfter=\"after\"in override?override.after:after;retv[key]={before:thisBefore?expectSpaceBefore:unexpectSpaceBefore,after:thisAfter?expectSpaceAfter:unexpectSpaceAfter};}else{retv[key]=defaultValue;}}return retv;}var checkMethodMap=parseOptions(context.options[0]);/**\n         * Reports a given token if usage of spacing followed by the token is\n         * invalid.\n         *\n         * @param {Token} token - A token to report.\n         * @param {RegExp|undefined} pattern - Optional. A pattern of the previous\n         *      token to check.\n         * @returns {void}\n         */function checkSpacingBefore(token,pattern){checkMethodMap[token.value].before(token,pattern);}/**\n         * Reports a given token if usage of spacing preceded by the token is\n         * invalid.\n         *\n         * @param {Token} token - A token to report.\n         * @param {RegExp|undefined} pattern - Optional. A pattern of the next\n         *      token to check.\n         * @returns {void}\n         */function checkSpacingAfter(token,pattern){checkMethodMap[token.value].after(token,pattern);}/**\n         * Reports a given token if usage of spacing around the token is invalid.\n         *\n         * @param {Token} token - A token to report.\n         * @returns {void}\n         */function checkSpacingAround(token){checkSpacingBefore(token);checkSpacingAfter(token);}/**\n         * Reports the first token of a given node if the first token is a keyword\n         * and usage of spacing around the token is invalid.\n         *\n         * @param {ASTNode|null} node - A node to report.\n         * @returns {void}\n         */function checkSpacingAroundFirstToken(node){var firstToken=node&&sourceCode.getFirstToken(node);if(firstToken&&firstToken.type===\"Keyword\"){checkSpacingAround(firstToken);}}/**\n         * Reports the first token of a given node if the first token is a keyword\n         * and usage of spacing followed by the token is invalid.\n         *\n         * This is used for unary operators (e.g. `typeof`), `function`, and `super`.\n         * Other rules are handling usage of spacing preceded by those keywords.\n         *\n         * @param {ASTNode|null} node - A node to report.\n         * @returns {void}\n         */function checkSpacingBeforeFirstToken(node){var firstToken=node&&sourceCode.getFirstToken(node);if(firstToken&&firstToken.type===\"Keyword\"){checkSpacingBefore(firstToken);}}/**\n         * Reports the previous token of a given node if the token is a keyword and\n         * usage of spacing around the token is invalid.\n         *\n         * @param {ASTNode|null} node - A node to report.\n         * @returns {void}\n         */function checkSpacingAroundTokenBefore(node){if(node){var token=sourceCode.getTokenBefore(node,astUtils.isKeywordToken);checkSpacingAround(token);}}/**\n         * Reports `async` or `function` keywords of a given node if usage of\n         * spacing around those keywords is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForFunction(node){var firstToken=node&&sourceCode.getFirstToken(node);if(firstToken&&(firstToken.type===\"Keyword\"&&firstToken.value===\"function\"||firstToken.value===\"async\")){checkSpacingBefore(firstToken);}}/**\n         * Reports `class` and `extends` keywords of a given node if usage of\n         * spacing around those keywords is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForClass(node){checkSpacingAroundFirstToken(node);checkSpacingAroundTokenBefore(node.superClass);}/**\n         * Reports `if` and `else` keywords of a given node if usage of spacing\n         * around those keywords is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForIfStatement(node){checkSpacingAroundFirstToken(node);checkSpacingAroundTokenBefore(node.alternate);}/**\n         * Reports `try`, `catch`, and `finally` keywords of a given node if usage\n         * of spacing around those keywords is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForTryStatement(node){checkSpacingAroundFirstToken(node);checkSpacingAroundFirstToken(node.handler);checkSpacingAroundTokenBefore(node.finalizer);}/**\n         * Reports `do` and `while` keywords of a given node if usage of spacing\n         * around those keywords is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForDoWhileStatement(node){checkSpacingAroundFirstToken(node);checkSpacingAroundTokenBefore(node.test);}/**\n         * Reports `for` and `in` keywords of a given node if usage of spacing\n         * around those keywords is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForForInStatement(node){checkSpacingAroundFirstToken(node);checkSpacingAroundTokenBefore(node.right);}/**\n         * Reports `for` and `of` keywords of a given node if usage of spacing\n         * around those keywords is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForForOfStatement(node){checkSpacingAroundFirstToken(node);checkSpacingAround(sourceCode.getTokenBefore(node.right,astUtils.isNotOpeningParenToken));}/**\n         * Reports `import`, `export`, `as`, and `from` keywords of a given node if\n         * usage of spacing around those keywords is invalid.\n         *\n         * This rule handles the `*` token in module declarations.\n         *\n         *     import*as A from \"./a\"; /*error Expected space(s) after \"import\".\n         *                               error Expected space(s) before \"as\".\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForModuleDeclaration(node){var firstToken=sourceCode.getFirstToken(node);checkSpacingBefore(firstToken,PREV_TOKEN_M);checkSpacingAfter(firstToken,NEXT_TOKEN_M);if(node.source){var fromToken=sourceCode.getTokenBefore(node.source);checkSpacingBefore(fromToken,PREV_TOKEN_M);checkSpacingAfter(fromToken,NEXT_TOKEN_M);}}/**\n         * Reports `as` keyword of a given node if usage of spacing around this\n         * keyword is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForImportNamespaceSpecifier(node){var asToken=sourceCode.getFirstToken(node,1);checkSpacingBefore(asToken,PREV_TOKEN_M);}/**\n         * Reports `static`, `get`, and `set` keywords of a given node if usage of\n         * spacing around those keywords is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForProperty(node){if(node.static){checkSpacingAroundFirstToken(node);}if(node.kind===\"get\"||node.kind===\"set\"||(node.method||node.type===\"MethodDefinition\")&&node.value.async){var token=sourceCode.getTokenBefore(node.key,function(tok){switch(tok.value){case\"get\":case\"set\":case\"async\":return true;default:return false;}});if(!token){throw new Error(\"Failed to find token get, set, or async beside method name\");}checkSpacingAround(token);}}/**\n         * Reports `await` keyword of a given node if usage of spacing before\n         * this keyword is invalid.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function checkSpacingForAwaitExpression(node){checkSpacingBefore(sourceCode.getFirstToken(node));}return{// Statements\nDebuggerStatement:checkSpacingAroundFirstToken,WithStatement:checkSpacingAroundFirstToken,// Statements - Control flow\nBreakStatement:checkSpacingAroundFirstToken,ContinueStatement:checkSpacingAroundFirstToken,ReturnStatement:checkSpacingAroundFirstToken,ThrowStatement:checkSpacingAroundFirstToken,TryStatement:checkSpacingForTryStatement,// Statements - Choice\nIfStatement:checkSpacingForIfStatement,SwitchStatement:checkSpacingAroundFirstToken,SwitchCase:checkSpacingAroundFirstToken,// Statements - Loops\nDoWhileStatement:checkSpacingForDoWhileStatement,ForInStatement:checkSpacingForForInStatement,ForOfStatement:checkSpacingForForOfStatement,ForStatement:checkSpacingAroundFirstToken,WhileStatement:checkSpacingAroundFirstToken,// Statements - Declarations\nClassDeclaration:checkSpacingForClass,ExportNamedDeclaration:checkSpacingForModuleDeclaration,ExportDefaultDeclaration:checkSpacingAroundFirstToken,ExportAllDeclaration:checkSpacingForModuleDeclaration,FunctionDeclaration:checkSpacingForFunction,ImportDeclaration:checkSpacingForModuleDeclaration,VariableDeclaration:checkSpacingAroundFirstToken,// Expressions\nArrowFunctionExpression:checkSpacingForFunction,AwaitExpression:checkSpacingForAwaitExpression,ClassExpression:checkSpacingForClass,FunctionExpression:checkSpacingForFunction,NewExpression:checkSpacingBeforeFirstToken,Super:checkSpacingBeforeFirstToken,ThisExpression:checkSpacingBeforeFirstToken,UnaryExpression:checkSpacingBeforeFirstToken,YieldExpression:checkSpacingBeforeFirstToken,// Others\nImportNamespaceSpecifier:checkSpacingForImportNamespaceSpecifier,MethodDefinition:checkSpacingForProperty,Property:checkSpacingForProperty};}};},{\"../ast-utils\":605,\"../util/keywords\":880}],663:[function(require,module,exports){/**\n * @fileoverview Rule to enforce the position of line comments\n * @author Alberto Rodríguez\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce position of line comments\",category:\"Stylistic Issues\",recommended:false},schema:[{oneOf:[{enum:[\"above\",\"beside\"]},{type:\"object\",properties:{position:{enum:[\"above\",\"beside\"]},ignorePattern:{type:\"string\"},applyDefaultPatterns:{type:\"boolean\"},applyDefaultIgnorePatterns:{type:\"boolean\"}},additionalProperties:false}]}]},create:function create(context){var options=context.options[0];var above=void 0,ignorePattern=void 0,applyDefaultIgnorePatterns=true;if(!options||typeof options===\"string\"){above=!options||options===\"above\";}else{above=options.position===\"above\";ignorePattern=options.ignorePattern;if(options.hasOwnProperty(\"applyDefaultIgnorePatterns\")){applyDefaultIgnorePatterns=options.applyDefaultIgnorePatterns!==false;}else{applyDefaultIgnorePatterns=options.applyDefaultPatterns!==false;}}var defaultIgnoreRegExp=astUtils.COMMENTS_IGNORE_PATTERN;var fallThroughRegExp=/^\\s*falls?\\s?through/;var customIgnoreRegExp=new RegExp(ignorePattern);var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{LineComment:function LineComment(node){if(applyDefaultIgnorePatterns&&(defaultIgnoreRegExp.test(node.value)||fallThroughRegExp.test(node.value))){return;}if(ignorePattern&&customIgnoreRegExp.test(node.value)){return;}var previous=sourceCode.getTokenBefore(node,{includeComments:true});var isOnSameLine=previous&&previous.loc.end.line===node.loc.start.line;if(above){if(isOnSameLine){context.report({node:node,message:\"Expected comment to be above code.\"});}}else{if(!isOnSameLine){context.report({node:node,message:\"Expected comment to be beside code.\"});}}}};}};},{\"../ast-utils\":605}],664:[function(require,module,exports){/**\n * @fileoverview Rule to enforce a single linebreak style.\n * @author Erik Mueller\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent linebreak style\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"unix\",\"windows\"]}]},create:function create(context){var EXPECTED_LF_MSG=\"Expected linebreaks to be 'LF' but found 'CRLF'.\",EXPECTED_CRLF_MSG=\"Expected linebreaks to be 'CRLF' but found 'LF'.\";var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Builds a fix function that replaces text at the specified range in the source text.\n         * @param {int[]} range The range to replace\n         * @param {string} text The text to insert.\n         * @returns {Function} Fixer function\n         * @private\n         */function createFix(range,text){return function(fixer){return fixer.replaceTextRange(range,text);};}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Program:function checkForlinebreakStyle(node){var linebreakStyle=context.options[0]||\"unix\",expectedLF=linebreakStyle===\"unix\",expectedLFChars=expectedLF?\"\\n\":\"\\r\\n\",source=sourceCode.getText(),pattern=astUtils.createGlobalLinebreakMatcher();var match=void 0;var i=0;while((match=pattern.exec(source))!==null){i++;if(match[0]===expectedLFChars){continue;}var index=match.index;var range=[index,index+match[0].length];context.report({node:node,loc:{line:i,column:sourceCode.lines[i-1].length},message:expectedLF?EXPECTED_LF_MSG:EXPECTED_CRLF_MSG,fix:createFix(range,expectedLFChars)});}}};}};},{\"../ast-utils\":605}],665:[function(require,module,exports){/**\n * @fileoverview Enforces empty lines around comments.\n * @author Jamund Ferguson\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar lodash=require(\"lodash\"),astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Return an array with with any line numbers that are empty.\n * @param {Array} lines An array of each line of the file.\n * @returns {Array} An array of line numbers.\n */function getEmptyLineNums(lines){var emptyLines=lines.map(function(line,i){return{code:line.trim(),num:i+1};}).filter(function(line){return!line.code;}).map(function(line){return line.num;});return emptyLines;}/**\n * Return an array with with any line numbers that contain comments.\n * @param {Array} comments An array of comment nodes.\n * @returns {Array} An array of line numbers.\n */function getCommentLineNums(comments){var lines=[];comments.forEach(function(token){var start=token.loc.start.line;var end=token.loc.end.line;lines.push(start,end);});return lines;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require empty lines around comments\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{beforeBlockComment:{type:\"boolean\"},afterBlockComment:{type:\"boolean\"},beforeLineComment:{type:\"boolean\"},afterLineComment:{type:\"boolean\"},allowBlockStart:{type:\"boolean\"},allowBlockEnd:{type:\"boolean\"},allowObjectStart:{type:\"boolean\"},allowObjectEnd:{type:\"boolean\"},allowArrayStart:{type:\"boolean\"},allowArrayEnd:{type:\"boolean\"},ignorePattern:{type:\"string\"},applyDefaultIgnorePatterns:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]?(0,_assign4.default)({},context.options[0]):{};var ignorePattern=options.ignorePattern;var defaultIgnoreRegExp=astUtils.COMMENTS_IGNORE_PATTERN;var customIgnoreRegExp=new RegExp(ignorePattern);var applyDefaultIgnorePatterns=options.applyDefaultIgnorePatterns!==false;options.beforeLineComment=options.beforeLineComment||false;options.afterLineComment=options.afterLineComment||false;options.beforeBlockComment=typeof options.beforeBlockComment!==\"undefined\"?options.beforeBlockComment:true;options.afterBlockComment=options.afterBlockComment||false;options.allowBlockStart=options.allowBlockStart||false;options.allowBlockEnd=options.allowBlockEnd||false;var sourceCode=context.getSourceCode();var lines=sourceCode.lines,numLines=lines.length+1,comments=sourceCode.getAllComments(),commentLines=getCommentLineNums(comments),emptyLines=getEmptyLineNums(lines),commentAndEmptyLines=commentLines.concat(emptyLines);/**\n         * Returns whether or not a token is a comment node type\n         * @param {Token} token The token to check\n         * @returns {boolean} True if the token is a comment node\n         */function isCommentNodeType(token){return token&&(token.type===\"Block\"||token.type===\"Line\");}/**\n         * Returns whether or not comments are on lines starting with or ending with code\n         * @param {ASTNode} node The comment node to check.\n         * @returns {boolean} True if the comment is not alone.\n         */function codeAroundComment(node){var token=void 0;token=node;do{token=sourceCode.getTokenBefore(token,{includeComments:true});}while(isCommentNodeType(token));if(token&&astUtils.isTokenOnSameLine(token,node)){return true;}token=node;do{token=sourceCode.getTokenAfter(token,{includeComments:true});}while(isCommentNodeType(token));if(token&&astUtils.isTokenOnSameLine(node,token)){return true;}return false;}/**\n         * Returns whether or not comments are inside a node type or not.\n         * @param {ASTNode} node The Comment node.\n         * @param {ASTNode} parent The Comment parent node.\n         * @param {string} nodeType The parent type to check against.\n         * @returns {boolean} True if the comment is inside nodeType.\n         */function isCommentInsideNodeType(node,parent,nodeType){return parent.type===nodeType||parent.body&&parent.body.type===nodeType||parent.consequent&&parent.consequent.type===nodeType;}/**\n         * Returns whether or not comments are at the parent start or not.\n         * @param {ASTNode} node The Comment node.\n         * @param {string} nodeType The parent type to check against.\n         * @returns {boolean} True if the comment is at parent start.\n         */function isCommentAtParentStart(node,nodeType){var ancestors=context.getAncestors();var parent=void 0;if(ancestors.length){parent=ancestors.pop();}return parent&&isCommentInsideNodeType(node,parent,nodeType)&&node.loc.start.line-parent.loc.start.line===1;}/**\n         * Returns whether or not comments are at the parent end or not.\n         * @param {ASTNode} node The Comment node.\n         * @param {string} nodeType The parent type to check against.\n         * @returns {boolean} True if the comment is at parent end.\n         */function isCommentAtParentEnd(node,nodeType){var ancestors=context.getAncestors();var parent=void 0;if(ancestors.length){parent=ancestors.pop();}return parent&&isCommentInsideNodeType(node,parent,nodeType)&&parent.loc.end.line-node.loc.end.line===1;}/**\n         * Returns whether or not comments are at the block start or not.\n         * @param {ASTNode} node The Comment node.\n         * @returns {boolean} True if the comment is at block start.\n         */function isCommentAtBlockStart(node){return isCommentAtParentStart(node,\"ClassBody\")||isCommentAtParentStart(node,\"BlockStatement\")||isCommentAtParentStart(node,\"SwitchCase\");}/**\n         * Returns whether or not comments are at the block end or not.\n         * @param {ASTNode} node The Comment node.\n         * @returns {boolean} True if the comment is at block end.\n         */function isCommentAtBlockEnd(node){return isCommentAtParentEnd(node,\"ClassBody\")||isCommentAtParentEnd(node,\"BlockStatement\")||isCommentAtParentEnd(node,\"SwitchCase\")||isCommentAtParentEnd(node,\"SwitchStatement\");}/**\n         * Returns whether or not comments are at the object start or not.\n         * @param {ASTNode} node The Comment node.\n         * @returns {boolean} True if the comment is at object start.\n         */function isCommentAtObjectStart(node){return isCommentAtParentStart(node,\"ObjectExpression\")||isCommentAtParentStart(node,\"ObjectPattern\");}/**\n         * Returns whether or not comments are at the object end or not.\n         * @param {ASTNode} node The Comment node.\n         * @returns {boolean} True if the comment is at object end.\n         */function isCommentAtObjectEnd(node){return isCommentAtParentEnd(node,\"ObjectExpression\")||isCommentAtParentEnd(node,\"ObjectPattern\");}/**\n         * Returns whether or not comments are at the array start or not.\n         * @param {ASTNode} node The Comment node.\n         * @returns {boolean} True if the comment is at array start.\n         */function isCommentAtArrayStart(node){return isCommentAtParentStart(node,\"ArrayExpression\")||isCommentAtParentStart(node,\"ArrayPattern\");}/**\n         * Returns whether or not comments are at the array end or not.\n         * @param {ASTNode} node The Comment node.\n         * @returns {boolean} True if the comment is at array end.\n         */function isCommentAtArrayEnd(node){return isCommentAtParentEnd(node,\"ArrayExpression\")||isCommentAtParentEnd(node,\"ArrayPattern\");}/**\n         * Checks if a comment node has lines around it (ignores inline comments)\n         * @param {ASTNode} node The Comment node.\n         * @param {Object} opts Options to determine the newline.\n         * @param {boolean} opts.after Should have a newline after this line.\n         * @param {boolean} opts.before Should have a newline before this line.\n         * @returns {void}\n         */function checkForEmptyLine(node,opts){if(applyDefaultIgnorePatterns&&defaultIgnoreRegExp.test(node.value)){return;}if(ignorePattern&&customIgnoreRegExp.test(node.value)){return;}var after=opts.after,before=opts.before;var prevLineNum=node.loc.start.line-1,nextLineNum=node.loc.end.line+1,commentIsNotAlone=codeAroundComment(node);var blockStartAllowed=options.allowBlockStart&&isCommentAtBlockStart(node),blockEndAllowed=options.allowBlockEnd&&isCommentAtBlockEnd(node),objectStartAllowed=options.allowObjectStart&&isCommentAtObjectStart(node),objectEndAllowed=options.allowObjectEnd&&isCommentAtObjectEnd(node),arrayStartAllowed=options.allowArrayStart&&isCommentAtArrayStart(node),arrayEndAllowed=options.allowArrayEnd&&isCommentAtArrayEnd(node);var exceptionStartAllowed=blockStartAllowed||objectStartAllowed||arrayStartAllowed;var exceptionEndAllowed=blockEndAllowed||objectEndAllowed||arrayEndAllowed;// ignore top of the file and bottom of the file\nif(prevLineNum<1){before=false;}if(nextLineNum>=numLines){after=false;}// we ignore all inline comments\nif(commentIsNotAlone){return;}var previousTokenOrComment=sourceCode.getTokenBefore(node,{includeComments:true});var nextTokenOrComment=sourceCode.getTokenAfter(node,{includeComments:true});// check for newline before\nif(!exceptionStartAllowed&&before&&!lodash.includes(commentAndEmptyLines,prevLineNum)&&!(isCommentNodeType(previousTokenOrComment)&&astUtils.isTokenOnSameLine(previousTokenOrComment,node))){var lineStart=node.range[0]-node.loc.start.column;var range=[lineStart,lineStart];context.report({node:node,message:\"Expected line before comment.\",fix:function fix(fixer){return fixer.insertTextBeforeRange(range,\"\\n\");}});}// check for newline after\nif(!exceptionEndAllowed&&after&&!lodash.includes(commentAndEmptyLines,nextLineNum)&&!(isCommentNodeType(nextTokenOrComment)&&astUtils.isTokenOnSameLine(node,nextTokenOrComment))){context.report({node:node,message:\"Expected line after comment.\",fix:function fix(fixer){return fixer.insertTextAfter(node,\"\\n\");}});}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{LineComment:function LineComment(node){if(options.beforeLineComment||options.afterLineComment){checkForEmptyLine(node,{after:options.afterLineComment,before:options.beforeLineComment});}},BlockComment:function BlockComment(node){if(options.beforeBlockComment||options.afterBlockComment){checkForEmptyLine(node,{after:options.afterBlockComment,before:options.beforeBlockComment});}}};}};},{\"../ast-utils\":605,\"lodash\":566}],666:[function(require,module,exports){/**\n * @fileoverview Require or disallow newlines around directives.\n * @author Kai Cataldo\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow newlines around directives\",category:\"Stylistic Issues\",recommended:false},schema:[{oneOf:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{before:{enum:[\"always\",\"never\"]},after:{enum:[\"always\",\"never\"]}},additionalProperties:false,minProperties:2}]}],fixable:\"whitespace\"},create:function create(context){var sourceCode=context.getSourceCode();var config=context.options[0]||\"always\";var expectLineBefore=typeof config===\"string\"?config:config.before;var expectLineAfter=typeof config===\"string\"?config:config.after;//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Check if node is preceded by a blank newline.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} Whether or not the passed in node is preceded by a blank newline.\n         */function hasNewlineBefore(node){var tokenBefore=sourceCode.getTokenBefore(node,{includeComments:true});var tokenLineBefore=tokenBefore?tokenBefore.loc.end.line:0;return node.loc.start.line-tokenLineBefore>=2;}/**\n        * Gets the last token of a node that is on the same line as the rest of the node.\n        * This will usually be the last token of the node, but it will be the second-to-last token if the node has a trailing\n        * semicolon on a different line.\n        * @param {ASTNode} node A directive node\n        * @returns {Token} The last token of the node on the line\n        */function getLastTokenOnLine(node){var lastToken=sourceCode.getLastToken(node);var secondToLastToken=sourceCode.getTokenBefore(lastToken);return astUtils.isSemicolonToken(lastToken)&&lastToken.loc.start.line>secondToLastToken.loc.end.line?secondToLastToken:lastToken;}/**\n         * Check if node is followed by a blank newline.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} Whether or not the passed in node is followed by a blank newline.\n         */function hasNewlineAfter(node){var lastToken=getLastTokenOnLine(node);var tokenAfter=sourceCode.getTokenAfter(lastToken,{includeComments:true});return tokenAfter.loc.start.line-lastToken.loc.end.line>=2;}/**\n         * Report errors for newlines around directives.\n         * @param {ASTNode} node Node to check.\n         * @param {string} location Whether the error was found before or after the directive.\n         * @param {boolean} expected Whether or not a newline was expected or unexpected.\n         * @returns {void}\n         */function reportError(node,location,expected){context.report({node:node,message:\"{{expected}} newline {{location}} \\\"{{value}}\\\" directive.\",data:{expected:expected?\"Expected\":\"Unexpected\",value:node.expression.value,location:location},fix:function fix(fixer){var lastToken=getLastTokenOnLine(node);if(expected){return location===\"before\"?fixer.insertTextBefore(node,\"\\n\"):fixer.insertTextAfter(lastToken,\"\\n\");}return fixer.removeRange(location===\"before\"?[node.range[0]-1,node.range[0]]:[lastToken.range[1],lastToken.range[1]+1]);}});}/**\n         * Check lines around directives in node\n         * @param {ASTNode} node - node to check\n         * @returns {void}\n         */function checkDirectives(node){var directives=astUtils.getDirectivePrologue(node);if(!directives.length){return;}var firstDirective=directives[0];var hasTokenOrCommentBefore=!!sourceCode.getTokenBefore(firstDirective,{includeComments:true});// Only check before the first directive if it is preceded by a comment or if it is at the top of\n// the file and expectLineBefore is set to \"never\". This is to not force a newline at the top of\n// the file if there are no comments as well as for compatibility with padded-blocks.\nif(firstDirective.leadingComments&&firstDirective.leadingComments.length||// Shebangs are not added to leading comments but are accounted for by the following.\nnode.type===\"Program\"&&hasTokenOrCommentBefore){if(expectLineBefore===\"always\"&&!hasNewlineBefore(firstDirective)){reportError(firstDirective,\"before\",true);}if(expectLineBefore===\"never\"&&hasNewlineBefore(firstDirective)){reportError(firstDirective,\"before\",false);}}else if(node.type===\"Program\"&&expectLineBefore===\"never\"&&!hasTokenOrCommentBefore&&hasNewlineBefore(firstDirective)){reportError(firstDirective,\"before\",false);}var lastDirective=directives[directives.length-1];var statements=node.type===\"Program\"?node.body:node.body.body;// Do not check after the last directive if the body only\n// contains a directive prologue and isn't followed by a comment to ensure\n// this rule behaves well with padded-blocks.\nif(lastDirective===statements[statements.length-1]&&!lastDirective.trailingComments){return;}if(expectLineAfter===\"always\"&&!hasNewlineAfter(lastDirective)){reportError(lastDirective,\"after\",true);}if(expectLineAfter===\"never\"&&hasNewlineAfter(lastDirective)){reportError(lastDirective,\"after\",false);}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Program:checkDirectives,FunctionDeclaration:checkDirectives,FunctionExpression:checkDirectives,ArrowFunctionExpression:checkDirectives};}};},{\"../ast-utils\":605}],667:[function(require,module,exports){/**\n * @fileoverview A rule to set the maximum depth block can be nested in a function.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};module.exports={meta:{docs:{description:\"enforce a maximum depth that blocks can be nested\",category:\"Stylistic Issues\",recommended:false},schema:[{oneOf:[{type:\"integer\",minimum:0},{type:\"object\",properties:{maximum:{type:\"integer\",minimum:0},max:{type:\"integer\",minimum:0}},additionalProperties:false}]}]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar functionStack=[],option=context.options[0];var maxDepth=4;if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"maximum\")&&typeof option.maximum===\"number\"){maxDepth=option.maximum;}if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"max\")&&typeof option.max===\"number\"){maxDepth=option.max;}if(typeof option===\"number\"){maxDepth=option;}/**\n         * When parsing a new function, store it in our function stack\n         * @returns {void}\n         * @private\n         */function startFunction(){functionStack.push(0);}/**\n         * When parsing is done then pop out the reference\n         * @returns {void}\n         * @private\n         */function endFunction(){functionStack.pop();}/**\n         * Save the block and Evaluate the node\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function pushBlock(node){var len=++functionStack[functionStack.length-1];if(len>maxDepth){context.report({node:node,message:\"Blocks are nested too deeply ({{depth}}).\",data:{depth:len}});}}/**\n         * Pop the saved block\n         * @returns {void}\n         * @private\n         */function popBlock(){functionStack[functionStack.length-1]--;}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{Program:startFunction,FunctionDeclaration:startFunction,FunctionExpression:startFunction,ArrowFunctionExpression:startFunction,IfStatement:function IfStatement(node){if(node.parent.type!==\"IfStatement\"){pushBlock(node);}},SwitchStatement:pushBlock,TryStatement:pushBlock,DoWhileStatement:pushBlock,WhileStatement:pushBlock,WithStatement:pushBlock,ForStatement:pushBlock,ForInStatement:pushBlock,ForOfStatement:pushBlock,\"IfStatement:exit\":popBlock,\"SwitchStatement:exit\":popBlock,\"TryStatement:exit\":popBlock,\"DoWhileStatement:exit\":popBlock,\"WhileStatement:exit\":popBlock,\"WithStatement:exit\":popBlock,\"ForStatement:exit\":popBlock,\"ForInStatement:exit\":popBlock,\"ForOfStatement:exit\":popBlock,\"FunctionDeclaration:exit\":endFunction,\"FunctionExpression:exit\":endFunction,\"ArrowFunctionExpression:exit\":endFunction,\"Program:exit\":endFunction};}};},{}],668:[function(require,module,exports){/**\n * @fileoverview Rule to check for max length on a line.\n * @author Matt DuVall <http://www.mattduvall.com>\n */\"use strict\";//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var OPTIONS_SCHEMA={type:\"object\",properties:{code:{type:\"integer\",minimum:0},comments:{type:\"integer\",minimum:0},tabWidth:{type:\"integer\",minimum:0},ignorePattern:{type:\"string\"},ignoreComments:{type:\"boolean\"},ignoreStrings:{type:\"boolean\"},ignoreUrls:{type:\"boolean\"},ignoreTemplateLiterals:{type:\"boolean\"},ignoreRegExpLiterals:{type:\"boolean\"},ignoreTrailingComments:{type:\"boolean\"}},additionalProperties:false};var OPTIONS_OR_INTEGER_SCHEMA={anyOf:[OPTIONS_SCHEMA,{type:\"integer\",minimum:0}]};//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce a maximum line length\",category:\"Stylistic Issues\",recommended:false},schema:[OPTIONS_OR_INTEGER_SCHEMA,OPTIONS_OR_INTEGER_SCHEMA,OPTIONS_SCHEMA]},create:function create(context){/*\n         * Inspired by http://tools.ietf.org/html/rfc3986#appendix-B, however:\n         * - They're matching an entire string that we know is a URI\n         * - We're matching part of a string where we think there *might* be a URL\n         * - We're only concerned about URLs, as picking out any URI would cause\n         *   too many false positives\n         * - We don't care about matching the entire URL, any small segment is fine\n         */var URL_REGEXP=/[^:/?#]:\\/\\/[^?#]/;var sourceCode=context.getSourceCode();/**\n         * Computes the length of a line that may contain tabs. The width of each\n         * tab will be the number of spaces to the next tab stop.\n         * @param {string} line The line.\n         * @param {int} tabWidth The width of each tab stop in spaces.\n         * @returns {int} The computed line length.\n         * @private\n         */function computeLineLength(line,tabWidth){var extraCharacterCount=0;line.replace(/\\t/g,function(match,offset){var totalOffset=offset+extraCharacterCount,previousTabStopOffset=tabWidth?totalOffset%tabWidth:0,spaceCount=tabWidth-previousTabStopOffset;extraCharacterCount+=spaceCount-1;// -1 for the replaced tab\n});return(0,_from2.default)(line).length+extraCharacterCount;}// The options object must be the last option specified…\nvar lastOption=context.options[context.options.length-1];var options=(typeof lastOption===\"undefined\"?\"undefined\":_typeof(lastOption))===\"object\"?(0,_create4.default)(lastOption):{};// …but max code length…\nif(typeof context.options[0]===\"number\"){options.code=context.options[0];}// …and tabWidth can be optionally specified directly as integers.\nif(typeof context.options[1]===\"number\"){options.tabWidth=context.options[1];}var maxLength=options.code||80,tabWidth=options.tabWidth||4,ignoreComments=options.ignoreComments||false,ignoreStrings=options.ignoreStrings||false,ignoreTemplateLiterals=options.ignoreTemplateLiterals||false,ignoreRegExpLiterals=options.ignoreRegExpLiterals||false,ignoreTrailingComments=options.ignoreTrailingComments||options.ignoreComments||false,ignoreUrls=options.ignoreUrls||false,maxCommentLength=options.comments;var ignorePattern=options.ignorePattern||null;if(ignorePattern){ignorePattern=new RegExp(ignorePattern);}//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Tells if a given comment is trailing: it starts on the current line and\n         * extends to or past the end of the current line.\n         * @param {string} line The source line we want to check for a trailing comment on\n         * @param {number} lineNumber The one-indexed line number for line\n         * @param {ASTNode} comment The comment to inspect\n         * @returns {boolean} If the comment is trailing on the given line\n         */function isTrailingComment(line,lineNumber,comment){return comment&&comment.loc.start.line===lineNumber&&lineNumber<=comment.loc.end.line&&(comment.loc.end.line>lineNumber||comment.loc.end.column===line.length);}/**\n         * Tells if a comment encompasses the entire line.\n         * @param {string} line The source line with a trailing comment\n         * @param {number} lineNumber The one-indexed line number this is on\n         * @param {ASTNode} comment The comment to remove\n         * @returns {boolean} If the comment covers the entire line\n         */function isFullLineComment(line,lineNumber,comment){var start=comment.loc.start,end=comment.loc.end,isFirstTokenOnLine=!line.slice(0,comment.loc.start.column).trim();return comment&&(start.line<lineNumber||start.line===lineNumber&&isFirstTokenOnLine)&&(end.line>lineNumber||end.line===lineNumber&&end.column===line.length);}/**\n         * Gets the line after the comment and any remaining trailing whitespace is\n         * stripped.\n         * @param {string} line The source line with a trailing comment\n         * @param {number} lineNumber The one-indexed line number this is on\n         * @param {ASTNode} comment The comment to remove\n         * @returns {string} Line without comment and trailing whitepace\n         */function stripTrailingComment(line,lineNumber,comment){// loc.column is zero-indexed\nreturn line.slice(0,comment.loc.start.column).replace(/\\s+$/,\"\");}/**\n         * Ensure that an array exists at [key] on `object`, and add `value` to it.\n         *\n         * @param {Object} object the object to mutate\n         * @param {string} key the object's key\n         * @param {*} value the value to add\n         * @returns {void}\n         * @private\n         */function ensureArrayAndPush(object,key,value){if(!Array.isArray(object[key])){object[key]=[];}object[key].push(value);}/**\n         * Retrieves an array containing all strings (\" or ') in the source code.\n         *\n         * @returns {ASTNode[]} An array of string nodes.\n         */function getAllStrings(){return sourceCode.ast.tokens.filter(function(token){return token.type===\"String\";});}/**\n         * Retrieves an array containing all template literals in the source code.\n         *\n         * @returns {ASTNode[]} An array of template literal nodes.\n         */function getAllTemplateLiterals(){return sourceCode.ast.tokens.filter(function(token){return token.type===\"Template\";});}/**\n         * Retrieves an array containing all RegExp literals in the source code.\n         *\n         * @returns {ASTNode[]} An array of RegExp literal nodes.\n         */function getAllRegExpLiterals(){return sourceCode.ast.tokens.filter(function(token){return token.type===\"RegularExpression\";});}/**\n         * A reducer to group an AST node by line number, both start and end.\n         *\n         * @param {Object} acc the accumulator\n         * @param {ASTNode} node the AST node in question\n         * @returns {Object} the modified accumulator\n         * @private\n         */function groupByLineNumber(acc,node){for(var i=node.loc.start.line;i<=node.loc.end.line;++i){ensureArrayAndPush(acc,i,node);}return acc;}/**\n         * Check the program for max length\n         * @param {ASTNode} node Node to examine\n         * @returns {void}\n         * @private\n         */function checkProgramForMaxLength(node){// split (honors line-ending)\nvar lines=sourceCode.lines,// list of comments to ignore\ncomments=ignoreComments||maxCommentLength||ignoreTrailingComments?sourceCode.getAllComments():[];// we iterate over comments in parallel with the lines\nvar commentsIndex=0;var strings=getAllStrings(sourceCode);var stringsByLine=strings.reduce(groupByLineNumber,{});var templateLiterals=getAllTemplateLiterals(sourceCode);var templateLiteralsByLine=templateLiterals.reduce(groupByLineNumber,{});var regExpLiterals=getAllRegExpLiterals(sourceCode);var regExpLiteralsByLine=regExpLiterals.reduce(groupByLineNumber,{});lines.forEach(function(line,i){// i is zero-indexed, line numbers are one-indexed\nvar lineNumber=i+1;/*\n                 * if we're checking comment length; we need to know whether this\n                 * line is a comment\n                 */var lineIsComment=false;/*\n                 * We can short-circuit the comment checks if we're already out of\n                 * comments to check.\n                 */if(commentsIndex<comments.length){var comment=null;// iterate over comments until we find one past the current line\ndo{comment=comments[++commentsIndex];}while(comment&&comment.loc.start.line<=lineNumber);// and step back by one\ncomment=comments[--commentsIndex];if(isFullLineComment(line,lineNumber,comment)){lineIsComment=true;}else if(ignoreTrailingComments&&isTrailingComment(line,lineNumber,comment)){line=stripTrailingComment(line,lineNumber,comment);}}if(ignorePattern&&ignorePattern.test(line)||ignoreUrls&&URL_REGEXP.test(line)||ignoreStrings&&stringsByLine[lineNumber]||ignoreTemplateLiterals&&templateLiteralsByLine[lineNumber]||ignoreRegExpLiterals&&regExpLiteralsByLine[lineNumber]){// ignore this line\nreturn;}var lineLength=computeLineLength(line,tabWidth);if(lineIsComment&&ignoreComments){return;}if(lineIsComment&&lineLength>maxCommentLength){context.report({node:node,loc:{line:lineNumber,column:0},message:\"Line {{lineNumber}} exceeds the maximum comment line length of {{maxCommentLength}}.\",data:{lineNumber:i+1,maxCommentLength:maxCommentLength}});}else if(lineLength>maxLength){context.report({node:node,loc:{line:lineNumber,column:0},message:\"Line {{lineNumber}} exceeds the maximum line length of {{maxLength}}.\",data:{lineNumber:i+1,maxLength:maxLength}});}});}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{Program:checkProgramForMaxLength};}};},{}],669:[function(require,module,exports){/**\n * @fileoverview enforce a maximum file length\n * @author Alberto Rodríguez\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce a maximum number of lines per file\",category:\"Stylistic Issues\",recommended:false},schema:[{oneOf:[{type:\"integer\",minimum:0},{type:\"object\",properties:{max:{type:\"integer\",minimum:0},skipComments:{type:\"boolean\"},skipBlankLines:{type:\"boolean\"}},additionalProperties:false}]}]},create:function create(context){var option=context.options[0];var max=300;if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"max\")&&typeof option.max===\"number\"){max=option.max;}if(typeof option===\"number\"){max=option;}var skipComments=option&&option.skipComments;var skipBlankLines=option&&option.skipBlankLines;var sourceCode=context.getSourceCode();/**\n         * Returns whether or not a token is a comment node type\n         * @param {Token} token The token to check\n         * @returns {boolean} True if the token is a comment node\n         */function isCommentNodeType(token){return token&&(token.type===\"Block\"||token.type===\"Line\");}/**\n         * Returns the line numbers of a comment that don't have any code on the same line\n         * @param {Node} comment The comment node to check\n         * @returns {int[]} The line numbers\n         */function getLinesWithoutCode(comment){var start=comment.loc.start.line;var end=comment.loc.end.line;var token=void 0;token=comment;do{token=sourceCode.getTokenBefore(token,{includeComments:true});}while(isCommentNodeType(token));if(token&&astUtils.isTokenOnSameLine(token,comment)){start+=1;}token=comment;do{token=sourceCode.getTokenAfter(token,{includeComments:true});}while(isCommentNodeType(token));if(token&&astUtils.isTokenOnSameLine(comment,token)){end-=1;}if(start<=end){return lodash.range(start,end+1);}return[];}return{\"Program:exit\":function ProgramExit(){var lines=sourceCode.lines.map(function(text,i){return{lineNumber:i+1,text:text};});if(skipBlankLines){lines=lines.filter(function(l){return l.text.trim()!==\"\";});}if(skipComments){var comments=sourceCode.getAllComments();var commentLines=lodash.flatten(comments.map(function(comment){return getLinesWithoutCode(comment);}));lines=lines.filter(function(l){return!lodash.includes(commentLines,l.lineNumber);});}if(lines.length>max){context.report({loc:{line:1,column:0},message:\"File must be at most {{max}} lines long. It's {{actual}} lines long.\",data:{max:max,actual:lines.length}});}}};}};},{\"../ast-utils\":605,\"lodash\":566}],670:[function(require,module,exports){/**\n * @fileoverview Rule to enforce a maximum number of nested callbacks.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};module.exports={meta:{docs:{description:\"enforce a maximum depth that callbacks can be nested\",category:\"Stylistic Issues\",recommended:false},schema:[{oneOf:[{type:\"integer\",minimum:0},{type:\"object\",properties:{maximum:{type:\"integer\",minimum:0},max:{type:\"integer\",minimum:0}},additionalProperties:false}]}]},create:function create(context){//--------------------------------------------------------------------------\n// Constants\n//--------------------------------------------------------------------------\nvar option=context.options[0];var THRESHOLD=10;if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"maximum\")&&typeof option.maximum===\"number\"){THRESHOLD=option.maximum;}if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"max\")&&typeof option.max===\"number\"){THRESHOLD=option.max;}if(typeof option===\"number\"){THRESHOLD=option;}//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar callbackStack=[];/**\n         * Checks a given function node for too many callbacks.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */function checkFunction(node){var parent=node.parent;if(parent.type===\"CallExpression\"){callbackStack.push(node);}if(callbackStack.length>THRESHOLD){var opts={num:callbackStack.length,max:THRESHOLD};context.report({node:node,message:\"Too many nested callbacks ({{num}}). Maximum allowed is {{max}}.\",data:opts});}}/**\n         * Pops the call stack.\n         * @returns {void}\n         * @private\n         */function popStack(){callbackStack.pop();}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{ArrowFunctionExpression:checkFunction,\"ArrowFunctionExpression:exit\":popStack,FunctionExpression:checkFunction,\"FunctionExpression:exit\":popStack};}};},{}],671:[function(require,module,exports){/**\n * @fileoverview Rule to flag when a function has too many parameters\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce a maximum number of parameters in function definitions\",category:\"Stylistic Issues\",recommended:false},schema:[{oneOf:[{type:\"integer\",minimum:0},{type:\"object\",properties:{maximum:{type:\"integer\",minimum:0},max:{type:\"integer\",minimum:0}},additionalProperties:false}]}]},create:function create(context){var option=context.options[0];var numParams=3;if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"maximum\")&&typeof option.maximum===\"number\"){numParams=option.maximum;}if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"max\")&&typeof option.max===\"number\"){numParams=option.max;}if(typeof option===\"number\"){numParams=option;}/**\n         * Checks a function to see if it has too many parameters.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */function checkFunction(node){if(node.params.length>numParams){context.report({node:node,message:\"{{name}} has too many parameters ({{count}}). Maximum allowed is {{max}}.\",data:{name:lodash.upperFirst(astUtils.getFunctionNameWithKind(node)),count:node.params.length,max:numParams}});}}return{FunctionDeclaration:checkFunction,ArrowFunctionExpression:checkFunction,FunctionExpression:checkFunction};}};},{\"../ast-utils\":605,\"lodash\":566}],672:[function(require,module,exports){/**\n * @fileoverview Specify the maximum number of statements allowed per line.\n * @author Kenneth Williams\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce a maximum number of statements allowed per line\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{max:{type:\"integer\",minimum:1}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode(),options=context.options[0]||{},maxStatementsPerLine=typeof options.max!==\"undefined\"?options.max:1,message=\"This line has {{numberOfStatementsOnThisLine}} {{statements}}. Maximum allowed is {{maxStatementsPerLine}}.\";var lastStatementLine=0,numberOfStatementsOnThisLine=0,firstExtraStatement=void 0;//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar SINGLE_CHILD_ALLOWED=/^(?:(?:DoWhile|For|ForIn|ForOf|If|Labeled|While)Statement|Export(?:Default|Named)Declaration)$/;/**\n         * Reports with the first extra statement, and clears it.\n         *\n         * @returns {void}\n         */function reportFirstExtraStatementAndClear(){if(firstExtraStatement){context.report({node:firstExtraStatement,message:message,data:{numberOfStatementsOnThisLine:numberOfStatementsOnThisLine,maxStatementsPerLine:maxStatementsPerLine,statements:numberOfStatementsOnThisLine===1?\"statement\":\"statements\"}});}firstExtraStatement=null;}/**\n         * Gets the actual last token of a given node.\n         *\n         * @param {ASTNode} node - A node to get. This is a node except EmptyStatement.\n         * @returns {Token} The actual last token.\n         */function getActualLastToken(node){return sourceCode.getLastToken(node,astUtils.isNotSemicolonToken);}/**\n         * Addresses a given node.\n         * It updates the state of this rule, then reports the node if the node violated this rule.\n         *\n         * @param {ASTNode} node - A node to check.\n         * @returns {void}\n         */function enterStatement(node){var line=node.loc.start.line;// Skip to allow non-block statements if this is direct child of control statements.\n// `if (a) foo();` is counted as 1.\n// But `if (a) foo(); else foo();` should be counted as 2.\nif(SINGLE_CHILD_ALLOWED.test(node.parent.type)&&node.parent.alternate!==node){return;}// Update state.\nif(line===lastStatementLine){numberOfStatementsOnThisLine+=1;}else{reportFirstExtraStatementAndClear();numberOfStatementsOnThisLine=1;lastStatementLine=line;}// Reports if the node violated this rule.\nif(numberOfStatementsOnThisLine===maxStatementsPerLine+1){firstExtraStatement=firstExtraStatement||node;}}/**\n         * Updates the state of this rule with the end line of leaving node to check with the next statement.\n         *\n         * @param {ASTNode} node - A node to check.\n         * @returns {void}\n         */function leaveStatement(node){var line=getActualLastToken(node).loc.end.line;// Update state.\nif(line!==lastStatementLine){reportFirstExtraStatementAndClear();numberOfStatementsOnThisLine=1;lastStatementLine=line;}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{BreakStatement:enterStatement,ClassDeclaration:enterStatement,ContinueStatement:enterStatement,DebuggerStatement:enterStatement,DoWhileStatement:enterStatement,ExpressionStatement:enterStatement,ForInStatement:enterStatement,ForOfStatement:enterStatement,ForStatement:enterStatement,FunctionDeclaration:enterStatement,IfStatement:enterStatement,ImportDeclaration:enterStatement,LabeledStatement:enterStatement,ReturnStatement:enterStatement,SwitchStatement:enterStatement,ThrowStatement:enterStatement,TryStatement:enterStatement,VariableDeclaration:enterStatement,WhileStatement:enterStatement,WithStatement:enterStatement,ExportNamedDeclaration:enterStatement,ExportDefaultDeclaration:enterStatement,ExportAllDeclaration:enterStatement,\"BreakStatement:exit\":leaveStatement,\"ClassDeclaration:exit\":leaveStatement,\"ContinueStatement:exit\":leaveStatement,\"DebuggerStatement:exit\":leaveStatement,\"DoWhileStatement:exit\":leaveStatement,\"ExpressionStatement:exit\":leaveStatement,\"ForInStatement:exit\":leaveStatement,\"ForOfStatement:exit\":leaveStatement,\"ForStatement:exit\":leaveStatement,\"FunctionDeclaration:exit\":leaveStatement,\"IfStatement:exit\":leaveStatement,\"ImportDeclaration:exit\":leaveStatement,\"LabeledStatement:exit\":leaveStatement,\"ReturnStatement:exit\":leaveStatement,\"SwitchStatement:exit\":leaveStatement,\"ThrowStatement:exit\":leaveStatement,\"TryStatement:exit\":leaveStatement,\"VariableDeclaration:exit\":leaveStatement,\"WhileStatement:exit\":leaveStatement,\"WithStatement:exit\":leaveStatement,\"ExportNamedDeclaration:exit\":leaveStatement,\"ExportDefaultDeclaration:exit\":leaveStatement,\"ExportAllDeclaration:exit\":leaveStatement,\"Program:exit\":reportFirstExtraStatementAndClear};}};},{\"../ast-utils\":605}],673:[function(require,module,exports){/**\n * @fileoverview A rule to set the maximum number of statements in a function.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce a maximum number of statements allowed in function blocks\",category:\"Stylistic Issues\",recommended:false},schema:[{oneOf:[{type:\"integer\",minimum:0},{type:\"object\",properties:{maximum:{type:\"integer\",minimum:0},max:{type:\"integer\",minimum:0}},additionalProperties:false}]},{type:\"object\",properties:{ignoreTopLevelFunctions:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar functionStack=[],option=context.options[0],ignoreTopLevelFunctions=context.options[1]&&context.options[1].ignoreTopLevelFunctions||false,topLevelFunctions=[];var maxStatements=10;if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"maximum\")&&typeof option.maximum===\"number\"){maxStatements=option.maximum;}if((typeof option===\"undefined\"?\"undefined\":_typeof(option))===\"object\"&&option.hasOwnProperty(\"max\")&&typeof option.max===\"number\"){maxStatements=option.max;}if(typeof option===\"number\"){maxStatements=option;}/**\n         * Reports a node if it has too many statements\n         * @param {ASTNode} node node to evaluate\n         * @param {int} count Number of statements in node\n         * @param {int} max Maximum number of statements allowed\n         * @returns {void}\n         * @private\n         */function reportIfTooManyStatements(node,count,max){if(count>max){var name=lodash.upperFirst(astUtils.getFunctionNameWithKind(node));context.report({node:node,message:\"{{name}} has too many statements ({{count}}). Maximum allowed is {{max}}.\",data:{name:name,count:count,max:max}});}}/**\n         * When parsing a new function, store it in our function stack\n         * @returns {void}\n         * @private\n         */function startFunction(){functionStack.push(0);}/**\n         * Evaluate the node at the end of function\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function endFunction(node){var count=functionStack.pop();if(ignoreTopLevelFunctions&&functionStack.length===0){topLevelFunctions.push({node:node,count:count});}else{reportIfTooManyStatements(node,count,maxStatements);}}/**\n         * Increment the count of the functions\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function countStatements(node){functionStack[functionStack.length-1]+=node.body.length;}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{FunctionDeclaration:startFunction,FunctionExpression:startFunction,ArrowFunctionExpression:startFunction,BlockStatement:countStatements,\"FunctionDeclaration:exit\":endFunction,\"FunctionExpression:exit\":endFunction,\"ArrowFunctionExpression:exit\":endFunction,\"Program:exit\":function ProgramExit(){if(topLevelFunctions.length===1){return;}topLevelFunctions.forEach(function(element){var count=element.count;var node=element.node;reportIfTooManyStatements(node,count,maxStatements);});}};}};},{\"../ast-utils\":605,\"lodash\":566}],674:[function(require,module,exports){/**\n * @fileoverview Enforce newlines between operands of ternary expressions\n * @author Kai Cataldo\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce newlines between operands of ternary expressions\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"always\",\"never\"]}]},create:function create(context){var multiline=context.options[0]!==\"never\";//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Tests whether node is preceded by supplied tokens\n         * @param {ASTNode} node - node to check\n         * @param {ASTNode} parentNode - parent of node to report\n         * @param {boolean} expected - whether newline was expected or not\n         * @returns {void}\n         * @private\n         */function reportError(node,parentNode,expected){context.report({node:node,message:\"{{expected}} newline between {{typeOfError}} of ternary expression.\",data:{expected:expected?\"Expected\":\"Unexpected\",typeOfError:node===parentNode.test?\"test and consequent\":\"consequent and alternate\"}});}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{ConditionalExpression:function ConditionalExpression(node){var areTestAndConsequentOnSameLine=astUtils.isTokenOnSameLine(node.test,node.consequent);var areConsequentAndAlternateOnSameLine=astUtils.isTokenOnSameLine(node.consequent,node.alternate);if(!multiline){if(!areTestAndConsequentOnSameLine){reportError(node.test,node,false);}if(!areConsequentAndAlternateOnSameLine){reportError(node.consequent,node,false);}}else{if(areTestAndConsequentOnSameLine){reportError(node.test,node,true);}if(areConsequentAndAlternateOnSameLine){reportError(node.consequent,node,true);}}}};}};},{\"../ast-utils\":605}],675:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of constructors without capital letters\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar CAPS_ALLOWED=[\"Array\",\"Boolean\",\"Date\",\"Error\",\"Function\",\"Number\",\"Object\",\"RegExp\",\"String\",\"Symbol\"];/**\n * Ensure that if the key is provided, it must be an array.\n * @param {Object} obj Object to check with `key`.\n * @param {string} key Object key to check on `obj`.\n * @param {*} fallback If obj[key] is not present, this will be returned.\n * @returns {string[]} Returns obj[key] if it's an Array, otherwise `fallback`\n */function checkArray(obj,key,fallback){/* istanbul ignore if */if(Object.prototype.hasOwnProperty.call(obj,key)&&!Array.isArray(obj[key])){throw new TypeError(key+\", if provided, must be an Array\");}return obj[key]||fallback;}/**\n * A reducer function to invert an array to an Object mapping the string form of the key, to `true`.\n * @param {Object} map Accumulator object for the reduce.\n * @param {string} key Object key to set to `true`.\n * @returns {Object} Returns the updated Object for further reduction.\n */function invert(map,key){map[key]=true;return map;}/**\n * Creates an object with the cap is new exceptions as its keys and true as their values.\n * @param {Object} config Rule configuration\n * @returns {Object} Object with cap is new exceptions.\n */function calculateCapIsNewExceptions(config){var capIsNewExceptions=checkArray(config,\"capIsNewExceptions\",CAPS_ALLOWED);if(capIsNewExceptions!==CAPS_ALLOWED){capIsNewExceptions=capIsNewExceptions.concat(CAPS_ALLOWED);}return capIsNewExceptions.reduce(invert,{});}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require constructor names to begin with a capital letter\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{newIsCap:{type:\"boolean\"},capIsNew:{type:\"boolean\"},newIsCapExceptions:{type:\"array\",items:{type:\"string\"}},newIsCapExceptionPattern:{type:\"string\"},capIsNewExceptions:{type:\"array\",items:{type:\"string\"}},capIsNewExceptionPattern:{type:\"string\"},properties:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var config=context.options[0]?(0,_assign4.default)({},context.options[0]):{};config.newIsCap=config.newIsCap!==false;config.capIsNew=config.capIsNew!==false;var skipProperties=config.properties===false;var newIsCapExceptions=checkArray(config,\"newIsCapExceptions\",[]).reduce(invert,{});var newIsCapExceptionPattern=config.newIsCapExceptionPattern?new RegExp(config.newIsCapExceptionPattern):null;var capIsNewExceptions=calculateCapIsNewExceptions(config);var capIsNewExceptionPattern=config.capIsNewExceptionPattern?new RegExp(config.capIsNewExceptionPattern):null;var listeners={};var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Get exact callee name from expression\n         * @param {ASTNode} node CallExpression or NewExpression node\n         * @returns {string} name\n         */function extractNameFromExpression(node){var name=\"\";if(node.callee.type===\"MemberExpression\"){var property=node.callee.property;if(property.type===\"Literal\"&&typeof property.value===\"string\"){name=property.value;}else if(property.type===\"Identifier\"&&!node.callee.computed){name=property.name;}}else{name=node.callee.name;}return name;}/**\n         * Returns the capitalization state of the string -\n         * Whether the first character is uppercase, lowercase, or non-alphabetic\n         * @param {string} str String\n         * @returns {string} capitalization state: \"non-alpha\", \"lower\", or \"upper\"\n         */function getCap(str){var firstChar=str.charAt(0);var firstCharLower=firstChar.toLowerCase();var firstCharUpper=firstChar.toUpperCase();if(firstCharLower===firstCharUpper){// char has no uppercase variant, so it's non-alphabetic\nreturn\"non-alpha\";}else if(firstChar===firstCharLower){return\"lower\";}return\"upper\";}/**\n         * Check if capitalization is allowed for a CallExpression\n         * @param {Object} allowedMap Object mapping calleeName to a Boolean\n         * @param {ASTNode} node CallExpression node\n         * @param {string} calleeName Capitalized callee name from a CallExpression\n         * @param {Object} pattern RegExp object from options pattern\n         * @returns {boolean} Returns true if the callee may be capitalized\n         */function isCapAllowed(allowedMap,node,calleeName,pattern){var sourceText=sourceCode.getText(node.callee);if(allowedMap[calleeName]||allowedMap[sourceText]){return true;}if(pattern&&pattern.test(sourceText)){return true;}if(calleeName===\"UTC\"&&node.callee.type===\"MemberExpression\"){// allow if callee is Date.UTC\nreturn node.callee.object.type===\"Identifier\"&&node.callee.object.name===\"Date\";}return skipProperties&&node.callee.type===\"MemberExpression\";}/**\n         * Reports the given message for the given node. The location will be the start of the property or the callee.\n         * @param {ASTNode} node CallExpression or NewExpression node.\n         * @param {string} message The message to report.\n         * @returns {void}\n         */function report(node,message){var callee=node.callee;if(callee.type===\"MemberExpression\"){callee=callee.property;}context.report({node:node,loc:callee.loc.start,message:message});}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nif(config.newIsCap){listeners.NewExpression=function(node){var constructorName=extractNameFromExpression(node);if(constructorName){var capitalization=getCap(constructorName);var isAllowed=capitalization!==\"lower\"||isCapAllowed(newIsCapExceptions,node,constructorName,newIsCapExceptionPattern);if(!isAllowed){report(node,\"A constructor name should not start with a lowercase letter.\");}}};}if(config.capIsNew){listeners.CallExpression=function(node){var calleeName=extractNameFromExpression(node);if(calleeName){var capitalization=getCap(calleeName);var isAllowed=capitalization!==\"upper\"||isCapAllowed(capIsNewExceptions,node,calleeName,capIsNewExceptionPattern);if(!isAllowed){report(node,\"A function with a name starting with an uppercase letter should only be used as a constructor.\");}}};}return listeners;}};},{}],676:[function(require,module,exports){/**\n * @fileoverview Rule to flag when using constructor without parentheses\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require parentheses when invoking a constructor with no arguments\",category:\"Stylistic Issues\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();return{NewExpression:function NewExpression(node){if(node.arguments.length!==0){return;// shortcut: if there are arguments, there have to be parens\n}var lastToken=sourceCode.getLastToken(node);var hasLastParen=lastToken&&astUtils.isClosingParenToken(lastToken);var hasParens=hasLastParen&&astUtils.isOpeningParenToken(sourceCode.getTokenBefore(lastToken));if(!hasParens){context.report({node:node,message:\"Missing '()' invoking a constructor.\",fix:function fix(fixer){return fixer.insertTextAfter(node,\"()\");}});}}};}};},{\"../ast-utils\":605}],677:[function(require,module,exports){/**\n * @fileoverview Rule to check empty newline after \"var\" statement\n * @author Gopal Venkatesan\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow an empty line after variable declarations\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"never\",\"always\"]}],fixable:\"whitespace\"},create:function create(context){var ALWAYS_MESSAGE=\"Expected blank line after variable declarations.\",NEVER_MESSAGE=\"Unexpected blank line after variable declarations.\";var sourceCode=context.getSourceCode();// Default `mode` to \"always\".\nvar mode=context.options[0]===\"never\"?\"never\":\"always\";// Cache starting and ending line numbers of comments for faster lookup\nvar commentEndLine=sourceCode.getAllComments().reduce(function(result,token){result[token.loc.start.line]=token.loc.end.line;return result;},{});//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Gets a token from the given node to compare line to the next statement.\n         *\n         * In general, the token is the last token of the node. However, the token is the second last token if the following conditions satisfy.\n         *\n         * - The last token is semicolon.\n         * - The semicolon is on a different line from the previous token of the semicolon.\n         *\n         * This behavior would address semicolon-less style code. e.g.:\n         *\n         *     var foo = 1\n         *\n         *     ;(a || b).doSomething()\n         *\n         * @param {ASTNode} node - The node to get.\n         * @returns {Token} The token to compare line to the next statement.\n         */function getLastToken(node){var lastToken=sourceCode.getLastToken(node);if(lastToken.type===\"Punctuator\"&&lastToken.value===\";\"){var prevToken=sourceCode.getTokenBefore(lastToken);if(prevToken.loc.end.line!==lastToken.loc.start.line){return prevToken;}}return lastToken;}/**\n         * Determine if provided keyword is a variable declaration\n         * @private\n         * @param {string} keyword - keyword to test\n         * @returns {boolean} True if `keyword` is a type of var\n         */function isVar(keyword){return keyword===\"var\"||keyword===\"let\"||keyword===\"const\";}/**\n         * Determine if provided keyword is a variant of for specifiers\n         * @private\n         * @param {string} keyword - keyword to test\n         * @returns {boolean} True if `keyword` is a variant of for specifier\n         */function isForTypeSpecifier(keyword){return keyword===\"ForStatement\"||keyword===\"ForInStatement\"||keyword===\"ForOfStatement\";}/**\n         * Determine if provided keyword is an export specifiers\n         * @private\n         * @param {string} nodeType - nodeType to test\n         * @returns {boolean} True if `nodeType` is an export specifier\n         */function isExportSpecifier(nodeType){return nodeType===\"ExportNamedDeclaration\"||nodeType===\"ExportSpecifier\"||nodeType===\"ExportDefaultDeclaration\"||nodeType===\"ExportAllDeclaration\";}/**\n         * Determine if provided node is the last of their parent block.\n         * @private\n         * @param {ASTNode} node - node to test\n         * @returns {boolean} True if `node` is last of their parent block.\n         */function isLastNode(node){var token=sourceCode.getTokenAfter(node);return!token||token.type===\"Punctuator\"&&token.value===\"}\";}/**\n        * Gets the last line of a group of consecutive comments\n        * @param {number} commentStartLine The starting line of the group\n        * @returns {number} The number of the last comment line of the group\n        */function getLastCommentLineOfBlock(commentStartLine){var currentCommentEnd=commentEndLine[commentStartLine];return commentEndLine[currentCommentEnd+1]?getLastCommentLineOfBlock(currentCommentEnd+1):currentCommentEnd;}/**\n         * Determine if a token starts more than one line after a comment ends\n         * @param  {token}   token            The token being checked\n         * @param {integer}  commentStartLine The line number on which the comment starts\n         * @returns {boolean}                 True if `token` does not start immediately after a comment\n         */function hasBlankLineAfterComment(token,commentStartLine){return token.loc.start.line>getLastCommentLineOfBlock(commentStartLine)+1;}/**\n         * Checks that a blank line exists after a variable declaration when mode is\n         * set to \"always\", or checks that there is no blank line when mode is set\n         * to \"never\"\n         * @private\n         * @param {ASTNode} node - `VariableDeclaration` node to test\n         * @returns {void}\n         */function checkForBlankLine(node){/*\n             * lastToken is the last token on the node's line. It will usually also be the last token of the node, but it will\n             * sometimes be second-last if there is a semicolon on a different line.\n             */var lastToken=getLastToken(node),/*\n             * If lastToken is the last token of the node, nextToken should be the token after the node. Otherwise, nextToken\n             * is the last token of the node.\n             */nextToken=lastToken===sourceCode.getLastToken(node)?sourceCode.getTokenAfter(node):sourceCode.getLastToken(node),nextLineNum=lastToken.loc.end.line+1;// Ignore if there is no following statement\nif(!nextToken){return;}// Ignore if parent of node is a for variant\nif(isForTypeSpecifier(node.parent.type)){return;}// Ignore if parent of node is an export specifier\nif(isExportSpecifier(node.parent.type)){return;}// Some coding styles use multiple `var` statements, so do nothing if\n// the next token is a `var` statement.\nif(nextToken.type===\"Keyword\"&&isVar(nextToken.value)){return;}// Ignore if it is last statement in a block\nif(isLastNode(node)){return;}// Next statement is not a `var`...\nvar noNextLineToken=nextToken.loc.start.line>nextLineNum;var hasNextLineComment=typeof commentEndLine[nextLineNum]!==\"undefined\";if(mode===\"never\"&&noNextLineToken&&!hasNextLineComment){context.report({node:node,message:NEVER_MESSAGE,data:{identifier:node.name},fix:function fix(fixer){var linesBetween=sourceCode.getText().slice(lastToken.range[1],nextToken.range[0]).split(astUtils.LINEBREAK_MATCHER);return fixer.replaceTextRange([lastToken.range[1],nextToken.range[0]],linesBetween.slice(0,-1).join(\"\")+\"\\n\"+linesBetween[linesBetween.length-1]);}});}// Token on the next line, or comment without blank line\nif(mode===\"always\"&&(!noNextLineToken||hasNextLineComment&&!hasBlankLineAfterComment(nextToken,nextLineNum))){context.report({node:node,message:ALWAYS_MESSAGE,data:{identifier:node.name},fix:function fix(fixer){if((noNextLineToken?getLastCommentLineOfBlock(nextLineNum):lastToken.loc.end.line)===nextToken.loc.start.line){return fixer.insertTextBefore(nextToken,\"\\n\\n\");}return fixer.insertTextBeforeRange([nextToken.range[0]-nextToken.loc.start.column,nextToken.range[1]],\"\\n\");}});}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{VariableDeclaration:checkForBlankLine};}};},{\"../ast-utils\":605}],678:[function(require,module,exports){/**\n * @fileoverview Rule to require newlines before `return` statement\n * @author Kai Cataldo\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require an empty line before `return` statements\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[]},create:function create(context){var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Tests whether node is preceded by supplied tokens\n         * @param {ASTNode} node - node to check\n         * @param {array} testTokens - array of tokens to test against\n         * @returns {boolean} Whether or not the node is preceded by one of the supplied tokens\n         * @private\n         */function isPrecededByTokens(node,testTokens){var tokenBefore=sourceCode.getTokenBefore(node);return testTokens.some(function(token){return tokenBefore.value===token;});}/**\n         * Checks whether node is the first node after statement or in block\n         * @param {ASTNode} node - node to check\n         * @returns {boolean} Whether or not the node is the first node after statement or in block\n         * @private\n         */function isFirstNode(node){var parentType=node.parent.type;if(node.parent.body){return Array.isArray(node.parent.body)?node.parent.body[0]===node:node.parent.body===node;}if(parentType===\"IfStatement\"){return isPrecededByTokens(node,[\"else\",\")\"]);}else if(parentType===\"DoWhileStatement\"){return isPrecededByTokens(node,[\"do\"]);}else if(parentType===\"SwitchCase\"){return isPrecededByTokens(node,[\":\"]);}return isPrecededByTokens(node,[\")\"]);}/**\n         * Returns the number of lines of comments that precede the node\n         * @param {ASTNode} node - node to check for overlapping comments\n         * @param {number} lineNumTokenBefore - line number of previous token, to check for overlapping comments\n         * @returns {number} Number of lines of comments that precede the node\n         * @private\n         */function calcCommentLines(node,lineNumTokenBefore){var comments=sourceCode.getComments(node).leading;var numLinesComments=0;if(!comments.length){return numLinesComments;}comments.forEach(function(comment){numLinesComments++;if(comment.type===\"Block\"){numLinesComments+=comment.loc.end.line-comment.loc.start.line;}// avoid counting lines with inline comments twice\nif(comment.loc.start.line===lineNumTokenBefore){numLinesComments--;}if(comment.loc.end.line===node.loc.start.line){numLinesComments--;}});return numLinesComments;}/**\n         * Returns the line number of the token before the node that is passed in as an argument\n         * @param {ASTNode} node - The node to use as the start of the calculation\n         * @returns {number} Line number of the token before `node`\n         * @private\n         */function getLineNumberOfTokenBefore(node){var tokenBefore=sourceCode.getTokenBefore(node);var lineNumTokenBefore=void 0;/**\n             * Global return (at the beginning of a script) is a special case.\n             * If there is no token before `return`, then we expect no line\n             * break before the return. Comments are allowed to occupy lines\n             * before the global return, just no blank lines.\n             * Setting lineNumTokenBefore to zero in that case results in the\n             * desired behavior.\n             */if(tokenBefore){lineNumTokenBefore=tokenBefore.loc.end.line;}else{lineNumTokenBefore=0;// global return at beginning of script\n}return lineNumTokenBefore;}/**\n         * Checks whether node is preceded by a newline\n         * @param {ASTNode} node - node to check\n         * @returns {boolean} Whether or not the node is preceded by a newline\n         * @private\n         */function hasNewlineBefore(node){var lineNumNode=node.loc.start.line;var lineNumTokenBefore=getLineNumberOfTokenBefore(node);var commentLines=calcCommentLines(node,lineNumTokenBefore);return lineNumNode-lineNumTokenBefore-commentLines>1;}/**\n         * Checks whether it is safe to apply a fix to a given return statement.\n         *\n         * The fix is not considered safe if the given return statement has leading comments,\n         * as we cannot safely determine if the newline should be added before or after the comments.\n         * For more information, see: https://github.com/eslint/eslint/issues/5958#issuecomment-222767211\n         *\n         * @param {ASTNode} node - The return statement node to check.\n         * @returns {boolean} `true` if it can fix the node.\n         * @private\n         */function canFix(node){var leadingComments=sourceCode.getComments(node).leading;var lastLeadingComment=leadingComments[leadingComments.length-1];var tokenBefore=sourceCode.getTokenBefore(node);if(leadingComments.length===0){return true;}// if the last leading comment ends in the same line as the previous token and\n// does not share a line with the `return` node, we can consider it safe to fix.\n// Example:\n// function a() {\n//     var b; //comment\n//     return;\n// }\nif(lastLeadingComment.loc.end.line===tokenBefore.loc.end.line&&lastLeadingComment.loc.end.line!==node.loc.start.line){return true;}return false;}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{ReturnStatement:function ReturnStatement(node){if(!isFirstNode(node)&&!hasNewlineBefore(node)){context.report({node:node,message:\"Expected newline before return statement.\",fix:function fix(fixer){if(canFix(node)){var tokenBefore=sourceCode.getTokenBefore(node);var newlines=node.loc.start.line===tokenBefore.loc.end.line?\"\\n\\n\":\"\\n\";return fixer.insertTextBefore(node,newlines);}return null;}});}}};}};},{}],679:[function(require,module,exports){/**\n * @fileoverview Rule to ensure newline per method call when chaining calls\n * @author Rajendra Patil\n * @author Burak Yigit Kaya\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require a newline after each call in a method chain\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{ignoreChainWithDepth:{type:\"integer\",minimum:1,maximum:10}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{},ignoreChainWithDepth=options.ignoreChainWithDepth||2;var sourceCode=context.getSourceCode();/**\n         * Gets the property text of a given MemberExpression node.\n         * If the text is multiline, this returns only the first line.\n         *\n         * @param {ASTNode} node - A MemberExpression node to get.\n         * @returns {string} The property text of the node.\n         */function getPropertyText(node){var prefix=node.computed?\"[\":\".\";var lines=sourceCode.getText(node.property).split(astUtils.LINEBREAK_MATCHER);var suffix=node.computed&&lines.length===1?\"]\":\"\";return prefix+lines[0]+suffix;}return{\"CallExpression:exit\":function CallExpressionExit(node){if(!node.callee||node.callee.type!==\"MemberExpression\"){return;}var callee=node.callee;var parent=callee.object;var depth=1;while(parent&&parent.callee){depth+=1;parent=parent.callee.object;}if(depth>ignoreChainWithDepth&&callee.property.loc.start.line===callee.object.loc.end.line){context.report({node:callee.property,loc:callee.property.loc.start,message:\"Expected line break before `{{callee}}`.\",data:{callee:getPropertyText(callee)}});}}};}};},{\"../ast-utils\":605}],680:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of alert, confirm, prompt\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar getPropertyName=require(\"../ast-utils\").getStaticPropertyName;//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks if the given name is a prohibited identifier.\n * @param {string} name The name to check\n * @returns {boolean} Whether or not the name is prohibited.\n */function isProhibitedIdentifier(name){return /^(alert|confirm|prompt)$/.test(name);}/**\n * Reports the given node and identifier name.\n * @param {RuleContext} context The ESLint rule context.\n * @param {ASTNode} node The node to report on.\n * @param {string} identifierName The name of the identifier.\n * @returns {void}\n */function report(context,node,identifierName){context.report(node,\"Unexpected {{name}}.\",{name:identifierName});}/**\n * Finds the escope reference in the given scope.\n * @param {Object} scope The scope to search.\n * @param {ASTNode} node The identifier node.\n * @returns {Reference|null} Returns the found reference or null if none were found.\n */function findReference(scope,node){var references=scope.references.filter(function(reference){return reference.identifier.range[0]===node.range[0]&&reference.identifier.range[1]===node.range[1];});if(references.length===1){return references[0];}return null;}/**\n * Checks if the given identifier node is shadowed in the given scope.\n * @param {Object} scope The current scope.\n * @param {Object} globalScope The global scope.\n * @param {string} node The identifier node to check\n * @returns {boolean} Whether or not the name is shadowed.\n */function isShadowed(scope,globalScope,node){var reference=findReference(scope,node);return reference&&reference.resolved&&reference.resolved.defs.length>0;}/**\n * Checks if the given identifier node is a ThisExpression in the global scope or the global window property.\n * @param {Object} scope The current scope.\n * @param {Object} globalScope The global scope.\n * @param {string} node The identifier node to check\n * @returns {boolean} Whether or not the node is a reference to the global object.\n */function isGlobalThisReferenceOrGlobalWindow(scope,globalScope,node){if(scope.type===\"global\"&&node.type===\"ThisExpression\"){return true;}else if(node.name===\"window\"){return!isShadowed(scope,globalScope,node);}return false;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `alert`, `confirm`, and `prompt`\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var globalScope=void 0;return{Program:function Program(){globalScope=context.getScope();},CallExpression:function CallExpression(node){var callee=node.callee,currentScope=context.getScope();// without window.\nif(callee.type===\"Identifier\"){var identifierName=callee.name;if(!isShadowed(currentScope,globalScope,callee)&&isProhibitedIdentifier(callee.name)){report(context,node,identifierName);}}else if(callee.type===\"MemberExpression\"&&isGlobalThisReferenceOrGlobalWindow(currentScope,globalScope,callee.object)){var _identifierName=getPropertyName(callee);if(isProhibitedIdentifier(_identifierName)){report(context,node,_identifierName);}}}};}};},{\"../ast-utils\":605}],681:[function(require,module,exports){/**\n * @fileoverview Disallow construction of dense arrays using the Array constructor\n * @author Matt DuVall <http://www.mattduvall.com/>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `Array` constructors\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){/**\n         * Disallow construction of dense arrays using the Array constructor\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function check(node){if(node.arguments.length!==1&&node.callee.type===\"Identifier\"&&node.callee.name===\"Array\"){context.report({node:node,message:\"The array literal notation [] is preferrable.\"});}}return{CallExpression:check,NewExpression:check};}};},{}],682:[function(require,module,exports){/**\n * @fileoverview Rule to disallow uses of await inside of loops.\n * @author Nat Mote (nmote)\n */\"use strict\";// Node types which are considered loops.\nvar loopTypes=new _set3.default([\"ForStatement\",\"ForOfStatement\",\"ForInStatement\",\"WhileStatement\",\"DoWhileStatement\"]);// Node types at which we should stop looking for loops. For example, it is fine to declare an async\n// function within a loop, and use await inside of that.\nvar boundaryTypes=new _set3.default([\"FunctionDeclaration\",\"FunctionExpression\",\"ArrowFunctionExpression\"]);module.exports={meta:{docs:{description:\"disallow `await` inside of loops\",category:\"Possible Errors\",recommended:false},schema:[]},create:function create(context){return{AwaitExpression:function AwaitExpression(node){var ancestors=context.getAncestors();// Reverse so that we can traverse from the deepest node upwards.\nancestors.reverse();// Create a set of all the ancestors plus this node so that we can check\n// if this use of await appears in the body of the loop as opposed to\n// the right-hand side of a for...of, for example.\nvar ancestorSet=new _set3.default(ancestors).add(node);for(var i=0;i<ancestors.length;i++){var ancestor=ancestors[i];if(boundaryTypes.has(ancestor.type)){// Short-circuit out if we encounter a boundary type. Loops above\n// this do not matter.\nreturn;}if(loopTypes.has(ancestor.type)){// Only report if we are actually in the body or another part that gets executed on\n// every iteration.\nif(ancestorSet.has(ancestor.body)||ancestorSet.has(ancestor.test)||ancestorSet.has(ancestor.update)){context.report({node:node,message:\"Unexpected `await` inside a loop.\"});return;}}}}};}};},{}],683:[function(require,module,exports){/**\n * @fileoverview Rule to flag bitwise identifiers\n * @author Nicholas C. Zakas\n */\"use strict\";//\n// Set of bitwise operators.\n//\nvar BITWISE_OPERATORS=[\"^\",\"|\",\"&\",\"<<\",\">>\",\">>>\",\"^=\",\"|=\",\"&=\",\"<<=\",\">>=\",\">>>=\",\"~\"];//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow bitwise operators\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{allow:{type:\"array\",items:{enum:BITWISE_OPERATORS},uniqueItems:true},int32Hint:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var allowed=options.allow||[];var int32Hint=options.int32Hint===true;/**\n         * Reports an unexpected use of a bitwise operator.\n         * @param   {ASTNode} node Node which contains the bitwise operator.\n         * @returns {void}\n         */function report(node){context.report({node:node,message:\"Unexpected use of '{{operator}}'.\",data:{operator:node.operator}});}/**\n         * Checks if the given node has a bitwise operator.\n         * @param   {ASTNode} node The node to check.\n         * @returns {boolean} Whether or not the node has a bitwise operator.\n         */function hasBitwiseOperator(node){return BITWISE_OPERATORS.indexOf(node.operator)!==-1;}/**\n         * Checks if exceptions were provided, e.g. `{ allow: ['~', '|'] }`.\n         * @param   {ASTNode} node The node to check.\n         * @returns {boolean} Whether or not the node has a bitwise operator.\n         */function allowedOperator(node){return allowed.indexOf(node.operator)!==-1;}/**\n         * Checks if the given bitwise operator is used for integer typecasting, i.e. \"|0\"\n         * @param   {ASTNode} node The node to check.\n         * @returns {boolean} whether the node is used in integer typecasting.\n         */function isInt32Hint(node){return int32Hint&&node.operator===\"|\"&&node.right&&node.right.type===\"Literal\"&&node.right.value===0;}/**\n         * Report if the given node contains a bitwise operator.\n         * @param   {ASTNode} node The node to check.\n         * @returns {void}\n         */function checkNodeForBitwiseOperator(node){if(hasBitwiseOperator(node)&&!allowedOperator(node)&&!isInt32Hint(node)){report(node);}}return{AssignmentExpression:checkNodeForBitwiseOperator,BinaryExpression:checkNodeForBitwiseOperator,UnaryExpression:checkNodeForBitwiseOperator};}};},{}],684:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of arguments.callee and arguments.caller.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `arguments.caller` or `arguments.callee`\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{MemberExpression:function MemberExpression(node){var objectName=node.object.name,propertyName=node.property.name;if(objectName===\"arguments\"&&!node.computed&&propertyName&&propertyName.match(/^calle[er]$/)){context.report({node:node,message:\"Avoid arguments.{{property}}.\",data:{property:propertyName}});}}};}};},{}],685:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of an lexical declarations inside a case clause\n * @author Erik Arvidsson\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow lexical declarations in case clauses\",category:\"Best Practices\",recommended:true},schema:[]},create:function create(context){/**\n         * Checks whether or not a node is a lexical declaration.\n         * @param {ASTNode} node A direct child statement of a switch case.\n         * @returns {boolean} Whether or not the node is a lexical declaration.\n         */function isLexicalDeclaration(node){switch(node.type){case\"FunctionDeclaration\":case\"ClassDeclaration\":return true;case\"VariableDeclaration\":return node.kind!==\"var\";default:return false;}}return{SwitchCase:function SwitchCase(node){for(var i=0;i<node.consequent.length;i++){var statement=node.consequent[i];if(isLexicalDeclaration(statement)){context.report({node:node,message:\"Unexpected lexical declaration in case block.\"});}}}};}};},{}],686:[function(require,module,exports){/**\n * @fileoverview Rule to flag variable leak in CatchClauses in IE 8 and earlier\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `catch` clause parameters from shadowing variables in the outer scope\",category:\"Variables\",recommended:false},schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Check if the parameters are been shadowed\n         * @param {Object} scope current scope\n         * @param {string} name parameter name\n         * @returns {boolean} True is its been shadowed\n         */function paramIsShadowing(scope,name){return astUtils.getVariableByName(scope,name)!==null;}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{CatchClause:function CatchClause(node){var scope=context.getScope();// When blockBindings is enabled, CatchClause creates its own scope\n// so start from one upper scope to exclude the current node\nif(scope.block===node){scope=scope.upper;}if(paramIsShadowing(scope,node.param.name)){context.report({node:node,message:\"Value of '{{name}}' may be overwritten in IE 8 and earlier.\",data:{name:node.param.name}});}}};}};},{\"../ast-utils\":605}],687:[function(require,module,exports){/**\n * @fileoverview A rule to disallow modifying variables of class declarations\n * @author Toru Nagashima\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow reassigning class members\",category:\"ECMAScript 6\",recommended:true},schema:[]},create:function create(context){/**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable - A variable to check.\n         * @returns {void}\n         */function checkVariable(variable){astUtils.getModifyingReferences(variable.references).forEach(function(reference){context.report({node:reference.identifier,message:\"'{{name}}' is a class.\",data:{name:reference.identifier.name}});});}/**\n         * Finds and reports references that are non initializer and writable.\n         * @param {ASTNode} node - A ClassDeclaration/ClassExpression node to check.\n         * @returns {void}\n         */function checkForClass(node){context.getDeclaredVariables(node).forEach(checkVariable);}return{ClassDeclaration:checkForClass,ClassExpression:checkForClass};}};},{\"../ast-utils\":605}],688:[function(require,module,exports){/**\n * @fileoverview The rule should warn against code that tries to compare against -0.\n * @author Aladdin-ADD <hh_2013@foxmail.com>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow comparing against -0\",category:\"Possible Errors\",recommended:false},fixable:null,schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Checks a given node is -0\n         *\n         * @param {ASTNode} node - A node to check.\n         * @returns {boolean} `true` if the node is -0.\n         */function isNegZero(node){return node.type===\"UnaryExpression\"&&node.operator===\"-\"&&node.argument.type===\"Literal\"&&node.argument.value===0;}var OPERATORS_TO_CHECK=new _set3.default([\">\",\">=\",\"<\",\"<=\",\"==\",\"===\",\"!=\",\"!==\"]);return{BinaryExpression:function BinaryExpression(node){if(OPERATORS_TO_CHECK.has(node.operator)){if(isNegZero(node.left)||isNegZero(node.right)){context.report({node:node,message:\"Do not use the '{{operator}}' operator to compare against -0.\",data:{operator:node.operator}});}}}};}};},{}],689:[function(require,module,exports){/**\n * @fileoverview Rule to flag assignment in a conditional statement's test expression\n * @author Stephen Murray <spmurrayzzz>\n */\"use strict\";var astUtils=require(\"../ast-utils\");var NODE_DESCRIPTIONS={DoWhileStatement:\"a 'do...while' statement\",ForStatement:\"a 'for' statement\",IfStatement:\"an 'if' statement\",WhileStatement:\"a 'while' statement\"};//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow assignment operators in conditional expressions\",category:\"Possible Errors\",recommended:true},schema:[{enum:[\"except-parens\",\"always\"]}]},create:function create(context){var prohibitAssign=context.options[0]||\"except-parens\";var sourceCode=context.getSourceCode();/**\n         * Check whether an AST node is the test expression for a conditional statement.\n         * @param {!Object} node The node to test.\n         * @returns {boolean} `true` if the node is the text expression for a conditional statement; otherwise, `false`.\n         */function isConditionalTestExpression(node){return node.parent&&node.parent.test&&node===node.parent.test;}/**\n         * Given an AST node, perform a bottom-up search for the first ancestor that represents a conditional statement.\n         * @param {!Object} node The node to use at the start of the search.\n         * @returns {?Object} The closest ancestor node that represents a conditional statement.\n         */function findConditionalAncestor(node){var currentAncestor=node;do{if(isConditionalTestExpression(currentAncestor)){return currentAncestor.parent;}}while((currentAncestor=currentAncestor.parent)&&!astUtils.isFunction(currentAncestor));return null;}/**\n         * Check whether the code represented by an AST node is enclosed in two sets of parentheses.\n         * @param {!Object} node The node to test.\n         * @returns {boolean} `true` if the code is enclosed in two sets of parentheses; otherwise, `false`.\n         */function isParenthesisedTwice(node){var previousToken=sourceCode.getTokenBefore(node,1),nextToken=sourceCode.getTokenAfter(node,1);return astUtils.isParenthesised(sourceCode,node)&&astUtils.isOpeningParenToken(previousToken)&&previousToken.range[1]<=node.range[0]&&astUtils.isClosingParenToken(nextToken)&&nextToken.range[0]>=node.range[1];}/**\n         * Check a conditional statement's test expression for top-level assignments that are not enclosed in parentheses.\n         * @param {!Object} node The node for the conditional statement.\n         * @returns {void}\n         */function testForAssign(node){if(node.test&&node.test.type===\"AssignmentExpression\"&&(node.type===\"ForStatement\"?!astUtils.isParenthesised(sourceCode,node.test):!isParenthesisedTwice(node.test))){// must match JSHint's error message\ncontext.report({node:node,loc:node.test.loc.start,message:\"Expected a conditional expression and instead saw an assignment.\"});}}/**\n         * Check whether an assignment expression is descended from a conditional statement's test expression.\n         * @param {!Object} node The node for the assignment expression.\n         * @returns {void}\n         */function testForConditionalAncestor(node){var ancestor=findConditionalAncestor(node);if(ancestor){context.report({node:ancestor,message:\"Unexpected assignment within {{type}}.\",data:{type:NODE_DESCRIPTIONS[ancestor.type]||ancestor.type}});}}if(prohibitAssign===\"always\"){return{AssignmentExpression:testForConditionalAncestor};}return{DoWhileStatement:testForAssign,ForStatement:testForAssign,IfStatement:testForAssign,WhileStatement:testForAssign};}};},{\"../ast-utils\":605}],690:[function(require,module,exports){/**\n * @fileoverview A rule to warn against using arrow functions when they could be\n * confused with comparisions\n * @author Jxck <https://github.com/Jxck>\n */\"use strict\";var astUtils=require(\"../ast-utils.js\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a node is a conditional expression.\n * @param {ASTNode} node - node to test\n * @returns {boolean} `true` if the node is a conditional expression.\n */function isConditional(node){return node&&node.type===\"ConditionalExpression\";}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow arrow functions where they could be confused with comparisons\",category:\"ECMAScript 6\",recommended:false},schema:[{type:\"object\",properties:{allowParens:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var config=context.options[0]||{};var sourceCode=context.getSourceCode();/**\n         * Reports if an arrow function contains an ambiguous conditional.\n         * @param {ASTNode} node - A node to check and report.\n         * @returns {void}\n         */function checkArrowFunc(node){var body=node.body;if(isConditional(body)&&!(config.allowParens&&astUtils.isParenthesised(sourceCode,body))){context.report({node:node,message:\"Arrow function used ambiguously with a conditional expression.\"});}}return{ArrowFunctionExpression:checkArrowFunc};}};},{\"../ast-utils.js\":605}],691:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of console object\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `console`\",category:\"Possible Errors\",recommended:true},schema:[{type:\"object\",properties:{allow:{type:\"array\",items:{type:\"string\"},minItems:1,uniqueItems:true}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var allowed=options.allow||[];/**\n         * Checks whether the given reference is 'console' or not.\n         *\n         * @param {escope.Reference} reference - The reference to check.\n         * @returns {boolean} `true` if the reference is 'console'.\n         */function isConsole(reference){var id=reference.identifier;return id&&id.name===\"console\";}/**\n         * Checks whether the property name of the given MemberExpression node\n         * is allowed by options or not.\n         *\n         * @param {ASTNode} node - The MemberExpression node to check.\n         * @returns {boolean} `true` if the property name of the node is allowed.\n         */function isAllowed(node){var propertyName=astUtils.getStaticPropertyName(node);return propertyName&&allowed.indexOf(propertyName)!==-1;}/**\n         * Checks whether the given reference is a member access which is not\n         * allowed by options or not.\n         *\n         * @param {escope.Reference} reference - The reference to check.\n         * @returns {boolean} `true` if the reference is a member access which\n         *      is not allowed by options.\n         */function isMemberAccessExceptAllowed(reference){var node=reference.identifier;var parent=node.parent;return parent.type===\"MemberExpression\"&&parent.object===node&&!isAllowed(parent);}/**\n         * Reports the given reference as a violation.\n         *\n         * @param {escope.Reference} reference - The reference to report.\n         * @returns {void}\n         */function report(reference){var node=reference.identifier.parent;context.report({node:node,loc:node.loc,message:\"Unexpected console statement.\"});}return{\"Program:exit\":function ProgramExit(){var scope=context.getScope();var consoleVar=astUtils.getVariableByName(scope,\"console\");var shadowed=consoleVar&&consoleVar.defs.length>0;/* 'scope.through' includes all references to undefined\n                 * variables. If the variable 'console' is not defined, it uses\n                 * 'scope.through'.\n                 */var references=consoleVar?consoleVar.references:scope.through.filter(isConsole);if(!shadowed){references.filter(isMemberAccessExceptAllowed).forEach(report);}}};}};},{\"../ast-utils\":605}],692:[function(require,module,exports){/**\n * @fileoverview A rule to disallow modifying variables that are declared using `const`\n * @author Toru Nagashima\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow reassigning `const` variables\",category:\"ECMAScript 6\",recommended:true},schema:[]},create:function create(context){/**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable - A variable to check.\n         * @returns {void}\n         */function checkVariable(variable){astUtils.getModifyingReferences(variable.references).forEach(function(reference){context.report({node:reference.identifier,message:\"'{{name}}' is constant.\",data:{name:reference.identifier.name}});});}return{VariableDeclaration:function VariableDeclaration(node){if(node.kind===\"const\"){context.getDeclaredVariables(node).forEach(checkVariable);}}};}};},{\"../ast-utils\":605}],693:[function(require,module,exports){/**\n * @fileoverview Rule to flag use constant conditions\n * @author Christian Schulz <http://rndm.de>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow constant expressions in conditions\",category:\"Possible Errors\",recommended:true},schema:[{type:\"object\",properties:{checkLoops:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{},checkLoops=options.checkLoops!==false;//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Checks if a branch node of LogicalExpression short circuits the whole condition\n         * @param {ASTNode} node The branch of main condition which needs to be checked\n         * @param {string} operator The operator of the main LogicalExpression.\n         * @returns {boolean} true when condition short circuits whole condition\n         */function isLogicalIdentity(node,operator){switch(node.type){case\"Literal\":return operator===\"||\"&&node.value===true||operator===\"&&\"&&node.value===false;case\"UnaryExpression\":return operator===\"&&\"&&node.operator===\"void\";case\"LogicalExpression\":return isLogicalIdentity(node.left,node.operator)||isLogicalIdentity(node.right,node.operator);// no default\n}return false;}/**\n         * Checks if a node has a constant truthiness value.\n         * @param {ASTNode} node The AST node to check.\n         * @param {boolean} inBooleanPosition `false` if checking branch of a condition.\n         *  `true` in all other cases\n         * @returns {Bool} true when node's truthiness is constant\n         * @private\n         */function isConstant(node,inBooleanPosition){switch(node.type){case\"Literal\":case\"ArrowFunctionExpression\":case\"FunctionExpression\":case\"ObjectExpression\":case\"ArrayExpression\":return true;case\"UnaryExpression\":if(node.operator===\"void\"){return true;}return node.operator===\"typeof\"&&inBooleanPosition||isConstant(node.argument,true);case\"BinaryExpression\":return isConstant(node.left,false)&&isConstant(node.right,false)&&node.operator!==\"in\";case\"LogicalExpression\":{var isLeftConstant=isConstant(node.left,inBooleanPosition);var isRightConstant=isConstant(node.right,inBooleanPosition);var isLeftShortCircuit=isLeftConstant&&isLogicalIdentity(node.left,node.operator);var isRightShortCircuit=isRightConstant&&isLogicalIdentity(node.right,node.operator);return isLeftConstant&&isRightConstant||isLeftShortCircuit||isRightShortCircuit;}case\"AssignmentExpression\":return node.operator===\"=\"&&isConstant(node.right,inBooleanPosition);case\"SequenceExpression\":return isConstant(node.expressions[node.expressions.length-1],inBooleanPosition);// no default\n}return false;}/**\n         * Reports when the given node contains a constant condition.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         * @private\n         */function checkConstantCondition(node){if(node.test&&isConstant(node.test,true)){context.report({node:node,message:\"Unexpected constant condition.\"});}}/**\n         * Checks node when checkLoops option is enabled\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         * @private\n         */function checkLoop(node){if(checkLoops){checkConstantCondition(node);}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{ConditionalExpression:checkConstantCondition,IfStatement:checkConstantCondition,WhileStatement:checkLoop,DoWhileStatement:checkLoop,ForStatement:checkLoop};}};},{}],694:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of continue statement\n * @author Borislav Zhivkov\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `continue` statements\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){return{ContinueStatement:function ContinueStatement(node){context.report({node:node,message:\"Unexpected use of continue statement.\"});}};}};},{}],695:[function(require,module,exports){/**\n * @fileoverview Rule to forbid control charactes from regular expressions.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow control characters in regular expressions\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){/**\n         * Get the regex expression\n         * @param {ASTNode} node node to evaluate\n         * @returns {*} Regex if found else null\n         * @private\n         */function getRegExp(node){if(node.value instanceof RegExp){return node.value;}else if(typeof node.value===\"string\"){var parent=context.getAncestors().pop();if((parent.type===\"NewExpression\"||parent.type===\"CallExpression\")&&parent.callee.type===\"Identifier\"&&parent.callee.name===\"RegExp\"){// there could be an invalid regular expression string\ntry{return new RegExp(node.value);}catch(ex){return null;}}}return null;}var controlChar=/[\\x00-\\x1f]/g;// eslint-disable-line no-control-regex\nvar consecutiveSlashes=/\\\\+/g;var consecutiveSlashesAtEnd=/\\\\+$/g;var stringControlChar=/\\\\x[01][0-9a-f]/ig;var stringControlCharWithoutSlash=/x[01][0-9a-f]/ig;/**\n         * Return a list of the control characters in the given regex string\n         * @param {string} regexStr regex as string to check\n         * @returns {array} returns a list of found control characters on given string\n         * @private\n         */function getControlCharacters(regexStr){// check control characters, if RegExp object used\nvar controlChars=regexStr.match(controlChar)||[];var stringControlChars=[];// check substr, if regex literal used\nvar subStrIndex=regexStr.search(stringControlChar);if(subStrIndex>-1){// is it escaped, check backslash count\nvar possibleEscapeCharacters=regexStr.slice(0,subStrIndex).match(consecutiveSlashesAtEnd);var hasControlChars=possibleEscapeCharacters===null||!(possibleEscapeCharacters[0].length%2);if(hasControlChars){stringControlChars=regexStr.slice(subStrIndex,-1).split(consecutiveSlashes).filter(Boolean).map(function(x){var match=x.match(stringControlCharWithoutSlash)||[x];return\"\\\\\"+match[0];});}}return controlChars.map(function(x){var hexCode=(\"0\"+x.charCodeAt(0).toString(16)).slice(-2);return\"\\\\x\"+hexCode;}).concat(stringControlChars);}return{Literal:function Literal(node){var regex=getRegExp(node);if(regex){var computedValue=regex.toString();var controlCharacters=getControlCharacters(computedValue);if(controlCharacters.length>0){context.report({node:node,message:\"Unexpected control character(s) in regular expression: {{controlChars}}.\",data:{controlChars:controlCharacters.join(\", \")}});}}}};}};},{}],696:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of a debugger statement\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `debugger`\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){return{DebuggerStatement:function DebuggerStatement(node){context.report({node:node,message:\"Unexpected 'debugger' statement.\"});}};}};},{}],697:[function(require,module,exports){/**\n * @fileoverview Rule to flag when deleting variables\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow deleting variables\",category:\"Variables\",recommended:true},schema:[]},create:function create(context){return{UnaryExpression:function UnaryExpression(node){if(node.operator===\"delete\"&&node.argument.type===\"Identifier\"){context.report({node:node,message:\"Variables should not be deleted.\"});}}};}};},{}],698:[function(require,module,exports){/**\n * @fileoverview Rule to check for ambiguous div operator in regexes\n * @author Matt DuVall <http://www.mattduvall.com>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow division operators explicitly at the beginning of regular expressions\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();return{Literal:function Literal(node){var token=sourceCode.getFirstToken(node);if(token.type===\"RegularExpression\"&&token.value[1]===\"=\"){context.report({node:node,message:\"A regular expression literal can be confused with '/='.\"});}}};}};},{}],699:[function(require,module,exports){/**\n * @fileoverview Rule to flag duplicate arguments\n * @author Jamund Ferguson\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow duplicate arguments in `function` definitions\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Checks whether or not a given definition is a parameter's.\n         * @param {escope.DefEntry} def - A definition to check.\n         * @returns {boolean} `true` if the definition is a parameter's.\n         */function isParameter(def){return def.type===\"Parameter\";}/**\n         * Determines if a given node has duplicate parameters.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */function checkParams(node){var variables=context.getDeclaredVariables(node);for(var i=0;i<variables.length;++i){var variable=variables[i];// Checks and reports duplications.\nvar defs=variable.defs.filter(isParameter);if(defs.length>=2){context.report({node:node,message:\"Duplicate param '{{name}}'.\",data:{name:variable.name}});}}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{FunctionDeclaration:checkParams,FunctionExpression:checkParams};}};},{}],700:[function(require,module,exports){/**\n * @fileoverview A rule to disallow duplicate name in class members.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow duplicate class members\",category:\"ECMAScript 6\",recommended:true},schema:[]},create:function create(context){var stack=[];/**\n         * Gets state of a given member name.\n         * @param {string} name - A name of a member.\n         * @param {boolean} isStatic - A flag which specifies that is a static member.\n         * @returns {Object} A state of a given member name.\n         *   - retv.init {boolean} A flag which shows the name is declared as normal member.\n         *   - retv.get {boolean} A flag which shows the name is declared as getter.\n         *   - retv.set {boolean} A flag which shows the name is declared as setter.\n         */function getState(name,isStatic){var stateMap=stack[stack.length-1];var key=\"$\"+name;// to avoid \"__proto__\".\nif(!stateMap[key]){stateMap[key]={nonStatic:{init:false,get:false,set:false},static:{init:false,get:false,set:false}};}return stateMap[key][isStatic?\"static\":\"nonStatic\"];}/**\n         * Gets the name text of a given node.\n         *\n         * @param {ASTNode} node - A node to get the name.\n         * @returns {string} The name text of the node.\n         */function getName(node){switch(node.type){case\"Identifier\":return node.name;case\"Literal\":return String(node.value);/* istanbul ignore next: syntax error */default:return\"\";}}return{// Initializes the stack of state of member declarations.\nProgram:function Program(){stack=[];},// Initializes state of member declarations for the class.\nClassBody:function ClassBody(){stack.push((0,_create4.default)(null));},// Disposes the state for the class.\n\"ClassBody:exit\":function ClassBodyExit(){stack.pop();},// Reports the node if its name has been declared already.\nMethodDefinition:function MethodDefinition(node){if(node.computed){return;}var name=getName(node.key);var state=getState(name,node.static);var isDuplicate=false;if(node.kind===\"get\"){isDuplicate=state.init||state.get;state.get=true;}else if(node.kind===\"set\"){isDuplicate=state.init||state.set;state.set=true;}else{isDuplicate=state.init||state.get||state.set;state.init=true;}if(isDuplicate){context.report({node:node,message:\"Duplicate name '{{name}}'.\",data:{name:name}});}}};}};},{}],701:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of duplicate keys in an object.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar GET_KIND=/^(?:init|get)$/;var SET_KIND=/^(?:init|set)$/;/**\n * The class which stores properties' information of an object.\n */var ObjectInfo=function(){/**\n     * @param {ObjectInfo|null} upper - The information of the outer object.\n     * @param {ASTNode} node - The ObjectExpression node of this information.\n     */function ObjectInfo(upper,node){_classCallCheck(this,ObjectInfo);this.upper=upper;this.node=node;this.properties=new _map4.default();}/**\n     * Gets the information of the given Property node.\n     * @param {ASTNode} node - The Property node to get.\n     * @returns {{get: boolean, set: boolean}} The information of the property.\n     */_createClass(ObjectInfo,[{key:\"getPropertyInfo\",value:function getPropertyInfo(node){var name=astUtils.getStaticPropertyName(node);if(!this.properties.has(name)){this.properties.set(name,{get:false,set:false});}return this.properties.get(name);}/**\n         * Checks whether the given property has been defined already or not.\n         * @param {ASTNode} node - The Property node to check.\n         * @returns {boolean} `true` if the property has been defined.\n         */},{key:\"isPropertyDefined\",value:function isPropertyDefined(node){var entry=this.getPropertyInfo(node);return GET_KIND.test(node.kind)&&entry.get||SET_KIND.test(node.kind)&&entry.set;}/**\n         * Defines the given property.\n         * @param {ASTNode} node - The Property node to define.\n         * @returns {void}\n         */},{key:\"defineProperty\",value:function defineProperty(node){var entry=this.getPropertyInfo(node);if(GET_KIND.test(node.kind)){entry.get=true;}if(SET_KIND.test(node.kind)){entry.set=true;}}}]);return ObjectInfo;}();//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow duplicate keys in object literals\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){var info=null;return{ObjectExpression:function ObjectExpression(node){info=new ObjectInfo(info,node);},\"ObjectExpression:exit\":function ObjectExpressionExit(){info=info.upper;},Property:function Property(node){var name=astUtils.getStaticPropertyName(node);// Skip destructuring.\nif(node.parent.type!==\"ObjectExpression\"){return;}// Skip if the name is not static.\nif(!name){return;}// Reports if the name is defined already.\nif(info.isPropertyDefined(node)){context.report({node:info.node,loc:node.key.loc,message:\"Duplicate key '{{name}}'.\",data:{name:name}});}// Update info.\ninfo.defineProperty(node);}};}};},{\"../ast-utils\":605}],702:[function(require,module,exports){/**\n * @fileoverview Rule to disallow a duplicate case label.\n * @author Dieter Oberkofler\n * @author Burak Yigit Kaya\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow duplicate case labels\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();return{SwitchStatement:function SwitchStatement(node){var mapping={};node.cases.forEach(function(switchCase){var key=sourceCode.getText(switchCase.test);if(mapping[key]){context.report({node:switchCase,message:\"Duplicate case label.\"});}else{mapping[key]=switchCase;}});}};}};},{}],703:[function(require,module,exports){/**\n * @fileoverview Restrict usage of duplicate imports.\n * @author Simen Bekkhus\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n/**\n * Returns the name of the module imported or re-exported.\n *\n * @param {ASTNode} node - A node to get.\n * @returns {string} the name of the module, or empty string if no name.\n */function getValue(node){if(node&&node.source&&node.source.value){return node.source.value.trim();}return\"\";}/**\n * Checks if the name of the import or export exists in the given array, and reports if so.\n *\n * @param {RuleContext} context - The ESLint rule context object.\n * @param {ASTNode} node - A node to get.\n * @param {string} value - The name of the imported or exported module.\n * @param {string[]} array - The array containing other imports or exports in the file.\n * @param {string} message - A message to be reported after the name of the module\n *\n * @returns {void} No return value\n */function checkAndReport(context,node,value,array,message){if(array.indexOf(value)!==-1){context.report({node:node,message:\"'{{module}}' {{message}}\",data:{module:value,message:message}});}}/**\n * @callback nodeCallback\n * @param {ASTNode} node - A node to handle.\n *//**\n * Returns a function handling the imports of a given file\n *\n * @param {RuleContext} context - The ESLint rule context object.\n * @param {boolean} includeExports - Whether or not to check for exports in addition to imports.\n * @param {string[]} importsInFile - The array containing other imports in the file.\n * @param {string[]} exportsInFile - The array containing other exports in the file.\n *\n * @returns {nodeCallback} A function passed to ESLint to handle the statement.\n */function handleImports(context,includeExports,importsInFile,exportsInFile){return function(node){var value=getValue(node);if(value){checkAndReport(context,node,value,importsInFile,\"import is duplicated.\");if(includeExports){checkAndReport(context,node,value,exportsInFile,\"import is duplicated as export.\");}importsInFile.push(value);}};}/**\n * Returns a function handling the exports of a given file\n *\n * @param {RuleContext} context - The ESLint rule context object.\n * @param {string[]} importsInFile - The array containing other imports in the file.\n * @param {string[]} exportsInFile - The array containing other exports in the file.\n *\n * @returns {nodeCallback} A function passed to ESLint to handle the statement.\n */function handleExports(context,importsInFile,exportsInFile){return function(node){var value=getValue(node);if(value){checkAndReport(context,node,value,exportsInFile,\"export is duplicated.\");checkAndReport(context,node,value,importsInFile,\"export is duplicated as import.\");exportsInFile.push(value);}};}module.exports={meta:{docs:{description:\"disallow duplicate module imports\",category:\"ECMAScript 6\",recommended:false},schema:[{type:\"object\",properties:{includeExports:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var includeExports=(context.options[0]||{}).includeExports,importsInFile=[],exportsInFile=[];var handlers={ImportDeclaration:handleImports(context,includeExports,importsInFile,exportsInFile)};if(includeExports){handlers.ExportNamedDeclaration=handleExports(context,importsInFile,exportsInFile);handlers.ExportAllDeclaration=handleExports(context,importsInFile,exportsInFile);}return handlers;}};},{}],704:[function(require,module,exports){/**\n * @fileoverview Rule to flag `else` after a `return` in `if`\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");var FixTracker=require(\"../util/fix-tracker\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `else` blocks after `return` statements in `if` statements\",category:\"Best Practices\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Display the context report if rule is violated\n         *\n         * @param {Node} node The 'else' node\n         * @returns {void}\n         */function displayReport(node){context.report({node:node,message:\"Unnecessary 'else' after 'return'.\",fix:function fix(fixer){var sourceCode=context.getSourceCode();var startToken=sourceCode.getFirstToken(node);var elseToken=sourceCode.getTokenBefore(startToken);var source=sourceCode.getText(node);var lastIfToken=sourceCode.getTokenBefore(elseToken);var fixedSource=void 0,firstTokenOfElseBlock=void 0;if(startToken.type===\"Punctuator\"&&startToken.value===\"{\"){firstTokenOfElseBlock=sourceCode.getTokenAfter(startToken);}else{firstTokenOfElseBlock=startToken;}// If the if block does not have curly braces and does not end in a semicolon\n// and the else block starts with (, [, /, +, ` or -, then it is not\n// safe to remove the else keyword, because ASI will not add a semicolon\n// after the if block\nvar ifBlockMaybeUnsafe=node.parent.consequent.type!==\"BlockStatement\"&&lastIfToken.value!==\";\";var elseBlockUnsafe=/^[([/+`-]/.test(firstTokenOfElseBlock.value);if(ifBlockMaybeUnsafe&&elseBlockUnsafe){return null;}var endToken=sourceCode.getLastToken(node);var lastTokenOfElseBlock=sourceCode.getTokenBefore(endToken);if(lastTokenOfElseBlock.value!==\";\"){var nextToken=sourceCode.getTokenAfter(endToken);var nextTokenUnsafe=nextToken&&/^[([/+`-]/.test(nextToken.value);var nextTokenOnSameLine=nextToken&&nextToken.loc.start.line===lastTokenOfElseBlock.loc.start.line;// If the else block contents does not end in a semicolon,\n// and the else block starts with (, [, /, +, ` or -, then it is not\n// safe to remove the else block, because ASI will not add a semicolon\n// after the remaining else block contents\nif(nextTokenUnsafe||nextTokenOnSameLine&&nextToken.value!==\"}\"){return null;}}if(startToken.type===\"Punctuator\"&&startToken.value===\"{\"){fixedSource=source.slice(1,-1);}else{fixedSource=source;}// Extend the replacement range to include the entire\n// function to avoid conflicting with no-useless-return.\n// https://github.com/eslint/eslint/issues/8026\nreturn new FixTracker(fixer,sourceCode).retainEnclosingFunction(node).replaceTextRange([elseToken.start,node.end],fixedSource);}});}/**\n         * Check to see if the node is a ReturnStatement\n         *\n         * @param {Node} node The node being evaluated\n         * @returns {boolean} True if node is a return\n         */function checkForReturn(node){return node.type===\"ReturnStatement\";}/**\n         * Naive return checking, does not iterate through the whole\n         * BlockStatement because we make the assumption that the ReturnStatement\n         * will be the last node in the body of the BlockStatement.\n         *\n         * @param {Node} node The consequent/alternate node\n         * @returns {boolean} True if it has a return\n         */function naiveHasReturn(node){if(node.type===\"BlockStatement\"){var body=node.body,lastChildNode=body[body.length-1];return lastChildNode&&checkForReturn(lastChildNode);}return checkForReturn(node);}/**\n         * Check to see if the node is valid for evaluation,\n         * meaning it has an else and not an else-if\n         *\n         * @param {Node} node The node being evaluated\n         * @returns {boolean} True if the node is valid\n         */function hasElse(node){return node.alternate&&node.consequent&&node.alternate.type!==\"IfStatement\";}/**\n         * If the consequent is an IfStatement, check to see if it has an else\n         * and both its consequent and alternate path return, meaning this is\n         * a nested case of rule violation.  If-Else not considered currently.\n         *\n         * @param {Node} node The consequent node\n         * @returns {boolean} True if this is a nested rule violation\n         */function checkForIf(node){return node.type===\"IfStatement\"&&hasElse(node)&&naiveHasReturn(node.alternate)&&naiveHasReturn(node.consequent);}/**\n         * Check the consequent/body node to make sure it is not\n         * a ReturnStatement or an IfStatement that returns on both\n         * code paths.\n         *\n         * @param {Node} node The consequent or body node\n         * @param {Node} alternate The alternate node\n         * @returns {boolean} `true` if it is a Return/If node that always returns.\n         */function checkForReturnOrIf(node){return checkForReturn(node)||checkForIf(node);}/**\n         * Check whether a node returns in every codepath.\n         * @param {Node} node The node to be checked\n         * @returns {boolean} `true` if it returns on every codepath.\n         */function alwaysReturns(node){if(node.type===\"BlockStatement\"){// If we have a BlockStatement, check each consequent body node.\nreturn node.body.some(checkForReturnOrIf);}/*\n             * If not a block statement, make sure the consequent isn't a\n             * ReturnStatement or an IfStatement with returns on both paths.\n             */return checkForReturnOrIf(node);}/**\n         * Check the if statement\n         * @returns {void}\n         * @param {Node} node The node for the if statement to check\n         * @private\n         */function IfStatement(node){var parent=context.getAncestors().pop();var consequents=void 0,alternate=void 0;/*\n             * Fixing this would require splitting one statement into two, so no error should\n             * be reported if this node is in a position where only one statement is allowed.\n             */if(!astUtils.STATEMENT_LIST_PARENTS.has(parent.type)){return;}for(consequents=[];node.type===\"IfStatement\";node=node.alternate){if(!node.alternate){return;}consequents.push(node.consequent);alternate=node.alternate;}if(consequents.every(alwaysReturns)){displayReport(alternate);}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{\"IfStatement:exit\":IfStatement};}};},{\"../ast-utils\":605,\"../util/fix-tracker\":879}],705:[function(require,module,exports){/**\n * @fileoverview Rule to flag the use of empty character classes in regular expressions\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/*\nplain-English description of the following regexp:\n0. `^` fix the match at the beginning of the string\n1. `\\/`: the `/` that begins the regexp\n2. `([^\\\\[]|\\\\.|\\[([^\\\\\\]]|\\\\.)+\\])*`: regexp contents; 0 or more of the following\n  2.0. `[^\\\\[]`: any character that's not a `\\` or a `[` (anything but escape sequences and character classes)\n  2.1. `\\\\.`: an escape sequence\n  2.2. `\\[([^\\\\\\]]|\\\\.)+\\]`: a character class that isn't empty\n3. `\\/` the `/` that ends the regexp\n4. `[gimuy]*`: optional regexp flags\n5. `$`: fix the match at the end of the string\n*/var regex=/^\\/([^\\\\[]|\\\\.|\\[([^\\\\\\]]|\\\\.)+])*\\/[gimuy]*$/;//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow empty character classes in regular expressions\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();return{Literal:function Literal(node){var token=sourceCode.getFirstToken(node);if(token.type===\"RegularExpression\"&&!regex.test(token.value)){context.report({node:node,message:\"Empty class.\"});}}};}};},{}],706:[function(require,module,exports){/**\n * @fileoverview Rule to disallow empty functions.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar ALLOW_OPTIONS=(0,_freeze2.default)([\"functions\",\"arrowFunctions\",\"generatorFunctions\",\"methods\",\"generatorMethods\",\"getters\",\"setters\",\"constructors\"]);/**\n * Gets the kind of a given function node.\n *\n * @param {ASTNode} node - A function node to get. This is one of\n *      an ArrowFunctionExpression, a FunctionDeclaration, or a\n *      FunctionExpression.\n * @returns {string} The kind of the function. This is one of \"functions\",\n *      \"arrowFunctions\", \"generatorFunctions\", \"asyncFunctions\", \"methods\",\n *      \"generatorMethods\", \"asyncMethods\", \"getters\", \"setters\", and\n *      \"constructors\".\n */function getKind(node){var parent=node.parent;var kind=\"\";if(node.type===\"ArrowFunctionExpression\"){return\"arrowFunctions\";}// Detects main kind.\nif(parent.type===\"Property\"){if(parent.kind===\"get\"){return\"getters\";}if(parent.kind===\"set\"){return\"setters\";}kind=parent.method?\"methods\":\"functions\";}else if(parent.type===\"MethodDefinition\"){if(parent.kind===\"get\"){return\"getters\";}if(parent.kind===\"set\"){return\"setters\";}if(parent.kind===\"constructor\"){return\"constructors\";}kind=\"methods\";}else{kind=\"functions\";}// Detects prefix.\nvar prefix=\"\";if(node.generator){prefix=\"generator\";}else if(node.async){prefix=\"async\";}else{return kind;}return prefix+kind[0].toUpperCase()+kind.slice(1);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow empty functions\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{allow:{type:\"array\",items:{enum:ALLOW_OPTIONS},uniqueItems:true}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var allowed=options.allow||[];var sourceCode=context.getSourceCode();/**\n         * Reports a given function node if the node matches the following patterns.\n         *\n         * - Not allowed by options.\n         * - The body is empty.\n         * - The body doesn't have any comments.\n         *\n         * @param {ASTNode} node - A function node to report. This is one of\n         *      an ArrowFunctionExpression, a FunctionDeclaration, or a\n         *      FunctionExpression.\n         * @returns {void}\n         */function reportIfEmpty(node){var kind=getKind(node);var name=astUtils.getFunctionNameWithKind(node);if(allowed.indexOf(kind)===-1&&node.body.type===\"BlockStatement\"&&node.body.body.length===0&&sourceCode.getComments(node.body).trailing.length===0){context.report({node:node,loc:node.body.loc.start,message:\"Unexpected empty {{name}}.\",data:{name:name}});}}return{ArrowFunctionExpression:reportIfEmpty,FunctionDeclaration:reportIfEmpty,FunctionExpression:reportIfEmpty};}};},{\"../ast-utils\":605}],707:[function(require,module,exports){/**\n * @fileoverview Rule to disallow an empty pattern\n * @author Alberto Rodríguez\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow empty destructuring patterns\",category:\"Best Practices\",recommended:true},schema:[]},create:function create(context){return{ObjectPattern:function ObjectPattern(node){if(node.properties.length===0){context.report({node:node,message:\"Unexpected empty object pattern.\"});}},ArrayPattern:function ArrayPattern(node){if(node.elements.length===0){context.report({node:node,message:\"Unexpected empty array pattern.\"});}}};}};},{}],708:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of an empty block statement\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow empty block statements\",category:\"Possible Errors\",recommended:true},schema:[{type:\"object\",properties:{allowEmptyCatch:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{},allowEmptyCatch=options.allowEmptyCatch||false;var sourceCode=context.getSourceCode();return{BlockStatement:function BlockStatement(node){// if the body is not empty, we can just return immediately\nif(node.body.length!==0){return;}// a function is generally allowed to be empty\nif(astUtils.isFunction(node.parent)){return;}if(allowEmptyCatch&&node.parent.type===\"CatchClause\"){return;}// any other block is only allowed to be empty, if it contains a comment\nif(sourceCode.getComments(node).trailing.length>0){return;}context.report({node:node,message:\"Empty block statement.\"});},SwitchStatement:function SwitchStatement(node){if(typeof node.cases===\"undefined\"||node.cases.length===0){context.report({node:node,message:\"Empty switch statement.\"});}}};}};},{\"../ast-utils\":605}],709:[function(require,module,exports){/**\n * @fileoverview Rule to flag comparisons to null without a type-checking\n * operator.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `null` comparisons without type-checking operators\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{BinaryExpression:function BinaryExpression(node){var badOperator=node.operator===\"==\"||node.operator===\"!=\";if(node.right.type===\"Literal\"&&node.right.raw===\"null\"&&badOperator||node.left.type===\"Literal\"&&node.left.raw===\"null\"&&badOperator){context.report({node:node,message:\"Use ‘===’ to compare with ‘null’.\"});}}};}};},{}],710:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of eval() statement\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar candidatesOfGlobalObject=(0,_freeze2.default)([\"global\",\"window\"]);/**\n * Checks a given node is a Identifier node of the specified name.\n *\n * @param {ASTNode} node - A node to check.\n * @param {string} name - A name to check.\n * @returns {boolean} `true` if the node is a Identifier node of the name.\n */function isIdentifier(node,name){return node.type===\"Identifier\"&&node.name===name;}/**\n * Checks a given node is a Literal node of the specified string value.\n *\n * @param {ASTNode} node - A node to check.\n * @param {string} name - A name to check.\n * @returns {boolean} `true` if the node is a Literal node of the name.\n */function isConstant(node,name){switch(node.type){case\"Literal\":return node.value===name;case\"TemplateLiteral\":return node.expressions.length===0&&node.quasis[0].value.cooked===name;default:return false;}}/**\n * Checks a given node is a MemberExpression node which has the specified name's\n * property.\n *\n * @param {ASTNode} node - A node to check.\n * @param {string} name - A name to check.\n * @returns {boolean} `true` if the node is a MemberExpression node which has\n *      the specified name's property\n */function isMember(node,name){return node.type===\"MemberExpression\"&&(node.computed?isConstant:isIdentifier)(node.property,name);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `eval()`\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{allowIndirect:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var allowIndirect=Boolean(context.options[0]&&context.options[0].allowIndirect);var sourceCode=context.getSourceCode();var funcInfo=null;/**\n         * Pushs a variable scope (Program or Function) information to the stack.\n         *\n         * This is used in order to check whether or not `this` binding is a\n         * reference to the global object.\n         *\n         * @param {ASTNode} node - A node of the scope. This is one of Program,\n         *      FunctionDeclaration, FunctionExpression, and ArrowFunctionExpression.\n         * @returns {void}\n         */function enterVarScope(node){var strict=context.getScope().isStrict;funcInfo={upper:funcInfo,node:node,strict:strict,defaultThis:false,initialized:strict};}/**\n         * Pops a variable scope from the stack.\n         *\n         * @returns {void}\n         */function exitVarScope(){funcInfo=funcInfo.upper;}/**\n         * Reports a given node.\n         *\n         * `node` is `Identifier` or `MemberExpression`.\n         * The parent of `node` might be `CallExpression`.\n         *\n         * The location of the report is always `eval` `Identifier` (or possibly\n         * `Literal`). The type of the report is `CallExpression` if the parent is\n         * `CallExpression`. Otherwise, it's the given node type.\n         *\n         * @param {ASTNode} node - A node to report.\n         * @returns {void}\n         */function report(node){var locationNode=node;var parent=node.parent;if(node.type===\"MemberExpression\"){locationNode=node.property;}if(parent.type===\"CallExpression\"&&parent.callee===node){node=parent;}context.report({node:node,loc:locationNode.loc.start,message:\"eval can be harmful.\"});}/**\n         * Reports accesses of `eval` via the global object.\n         *\n         * @param {escope.Scope} globalScope - The global scope.\n         * @returns {void}\n         */function reportAccessingEvalViaGlobalObject(globalScope){for(var i=0;i<candidatesOfGlobalObject.length;++i){var name=candidatesOfGlobalObject[i];var variable=astUtils.getVariableByName(globalScope,name);if(!variable){continue;}var references=variable.references;for(var j=0;j<references.length;++j){var identifier=references[j].identifier;var node=identifier.parent;// To detect code like `window.window.eval`.\nwhile(isMember(node,name)){node=node.parent;}// Reports.\nif(isMember(node,\"eval\")){report(node);}}}}/**\n         * Reports all accesses of `eval` (excludes direct calls to eval).\n         *\n         * @param {escope.Scope} globalScope - The global scope.\n         * @returns {void}\n         */function reportAccessingEval(globalScope){var variable=astUtils.getVariableByName(globalScope,\"eval\");if(!variable){return;}var references=variable.references;for(var i=0;i<references.length;++i){var reference=references[i];var id=reference.identifier;if(id.name===\"eval\"&&!astUtils.isCallee(id)){// Is accessing to eval (excludes direct calls to eval)\nreport(id);}}}if(allowIndirect){// Checks only direct calls to eval. It's simple!\nreturn{\"CallExpression:exit\":function CallExpressionExit(node){var callee=node.callee;if(isIdentifier(callee,\"eval\")){report(callee);}}};}return{\"CallExpression:exit\":function CallExpressionExit(node){var callee=node.callee;if(isIdentifier(callee,\"eval\")){report(callee);}},Program:function Program(node){var scope=context.getScope(),features=context.parserOptions.ecmaFeatures||{},strict=scope.isStrict||node.sourceType===\"module\"||features.globalReturn&&scope.childScopes[0].isStrict;funcInfo={upper:null,node:node,strict:strict,defaultThis:true,initialized:true};},\"Program:exit\":function ProgramExit(){var globalScope=context.getScope();exitVarScope();reportAccessingEval(globalScope);reportAccessingEvalViaGlobalObject(globalScope);},FunctionDeclaration:enterVarScope,\"FunctionDeclaration:exit\":exitVarScope,FunctionExpression:enterVarScope,\"FunctionExpression:exit\":exitVarScope,ArrowFunctionExpression:enterVarScope,\"ArrowFunctionExpression:exit\":exitVarScope,ThisExpression:function ThisExpression(node){if(!isMember(node.parent,\"eval\")){return;}/*\n                 * `this.eval` is found.\n                 * Checks whether or not the value of `this` is the global object.\n                 */if(!funcInfo.initialized){funcInfo.initialized=true;funcInfo.defaultThis=astUtils.isDefaultThisBinding(funcInfo.node,sourceCode);}if(!funcInfo.strict&&funcInfo.defaultThis){// `this.eval` is possible built-in `eval`.\nreport(node.parent);}}};}};},{\"../ast-utils\":605}],711:[function(require,module,exports){/**\n * @fileoverview Rule to flag assignment of the exception parameter\n * @author Stephen Murray <spmurrayzzz>\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow reassigning exceptions in `catch` clauses\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){/**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable - A variable to check.\n         * @returns {void}\n         */function checkVariable(variable){astUtils.getModifyingReferences(variable.references).forEach(function(reference){context.report({node:reference.identifier,message:\"Do not assign to the exception parameter.\"});});}return{CatchClause:function CatchClause(node){context.getDeclaredVariables(node).forEach(checkVariable);}};}};},{\"../ast-utils\":605}],712:[function(require,module,exports){/**\n * @fileoverview Rule to flag adding properties to native object's prototypes.\n * @author David Nelson\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar globals=require(\"globals\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow extending native types\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{exceptions:{type:\"array\",items:{type:\"string\"},uniqueItems:true}},additionalProperties:false}]},create:function create(context){var config=context.options[0]||{};var exceptions=config.exceptions||[];var modifiedBuiltins=(0,_keys4.default)(globals.builtin).filter(function(builtin){return builtin[0].toUpperCase()===builtin[0];});if(exceptions.length){modifiedBuiltins=modifiedBuiltins.filter(function(builtIn){return exceptions.indexOf(builtIn)===-1;});}return{// handle the Array.prototype.extra style case\nAssignmentExpression:function AssignmentExpression(node){var lhs=node.left;if(lhs.type!==\"MemberExpression\"||lhs.object.type!==\"MemberExpression\"){return;}var affectsProto=lhs.object.computed?lhs.object.property.type===\"Literal\"&&lhs.object.property.value===\"prototype\":lhs.object.property.name===\"prototype\";if(!affectsProto){return;}modifiedBuiltins.forEach(function(builtin){if(lhs.object.object.name===builtin){context.report({node:node,message:\"{{builtin}} prototype is read only, properties should not be added.\",data:{builtin:builtin}});}});},// handle the Object.definePropert[y|ies](Array.prototype) case\nCallExpression:function CallExpression(node){var callee=node.callee;// only worry about Object.definePropert[y|ies]\nif(callee.type===\"MemberExpression\"&&callee.object.name===\"Object\"&&(callee.property.name===\"defineProperty\"||callee.property.name===\"defineProperties\")){// verify the object being added to is a native prototype\nvar subject=node.arguments[0];var object=subject&&subject.object;if(object&&object.type===\"Identifier\"&&modifiedBuiltins.indexOf(object.name)>-1&&subject.property.name===\"prototype\"){context.report({node:node,message:\"{{objectName}} prototype is read only, properties should not be added.\",data:{objectName:object.name}});}}}};}};},{\"globals\":374}],713:[function(require,module,exports){/**\n * @fileoverview Rule to flag unnecessary bind calls\n * @author Bence Dányi <bence@danyi.me>\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unnecessary calls to `.bind()`\",category:\"Best Practices\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var scopeInfo=null;/**\n         * Reports a given function node.\n         *\n         * @param {ASTNode} node - A node to report. This is a FunctionExpression or\n         *      an ArrowFunctionExpression.\n         * @returns {void}\n         */function report(node){context.report({node:node.parent.parent,message:\"The function binding is unnecessary.\",loc:node.parent.property.loc.start,fix:function fix(fixer){var firstTokenToRemove=context.getSourceCode().getFirstTokenBetween(node.parent.object,node.parent.property,astUtils.isNotClosingParenToken);return fixer.removeRange([firstTokenToRemove.range[0],node.parent.parent.range[1]]);}});}/**\n         * Checks whether or not a given function node is the callee of `.bind()`\n         * method.\n         *\n         * e.g. `(function() {}.bind(foo))`\n         *\n         * @param {ASTNode} node - A node to report. This is a FunctionExpression or\n         *      an ArrowFunctionExpression.\n         * @returns {boolean} `true` if the node is the callee of `.bind()` method.\n         */function isCalleeOfBindMethod(node){var parent=node.parent;var grandparent=parent.parent;return grandparent&&grandparent.type===\"CallExpression\"&&grandparent.callee===parent&&grandparent.arguments.length===1&&parent.type===\"MemberExpression\"&&parent.object===node&&astUtils.getStaticPropertyName(parent)===\"bind\";}/**\n         * Adds a scope information object to the stack.\n         *\n         * @param {ASTNode} node - A node to add. This node is a FunctionExpression\n         *      or a FunctionDeclaration node.\n         * @returns {void}\n         */function enterFunction(node){scopeInfo={isBound:isCalleeOfBindMethod(node),thisFound:false,upper:scopeInfo};}/**\n         * Removes the scope information object from the top of the stack.\n         * At the same time, this reports the function node if the function has\n         * `.bind()` and the `this` keywords found.\n         *\n         * @param {ASTNode} node - A node to remove. This node is a\n         *      FunctionExpression or a FunctionDeclaration node.\n         * @returns {void}\n         */function exitFunction(node){if(scopeInfo.isBound&&!scopeInfo.thisFound){report(node);}scopeInfo=scopeInfo.upper;}/**\n         * Reports a given arrow function if the function is callee of `.bind()`\n         * method.\n         *\n         * @param {ASTNode} node - A node to report. This node is an\n         *      ArrowFunctionExpression.\n         * @returns {void}\n         */function exitArrowFunction(node){if(isCalleeOfBindMethod(node)){report(node);}}/**\n         * Set the mark as the `this` keyword was found in this scope.\n         *\n         * @returns {void}\n         */function markAsThisFound(){if(scopeInfo){scopeInfo.thisFound=true;}}return{\"ArrowFunctionExpression:exit\":exitArrowFunction,FunctionDeclaration:enterFunction,\"FunctionDeclaration:exit\":exitFunction,FunctionExpression:enterFunction,\"FunctionExpression:exit\":exitFunction,ThisExpression:markAsThisFound};}};},{\"../ast-utils\":605}],714:[function(require,module,exports){/**\n * @fileoverview Rule to flag unnecessary double negation in Boolean contexts\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unnecessary boolean casts\",category:\"Possible Errors\",recommended:true},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();// Node types which have a test which will coerce values to booleans.\nvar BOOLEAN_NODE_TYPES=[\"IfStatement\",\"DoWhileStatement\",\"WhileStatement\",\"ConditionalExpression\",\"ForStatement\"];/**\n         * Check if a node is in a context where its value would be coerced to a boolean at runtime.\n         *\n         * @param {Object} node The node\n         * @param {Object} parent Its parent\n         * @returns {boolean} If it is in a boolean context\n         */function isInBooleanContext(node,parent){return BOOLEAN_NODE_TYPES.indexOf(parent.type)!==-1&&node===parent.test||// !<bool>\nparent.type===\"UnaryExpression\"&&parent.operator===\"!\";}return{UnaryExpression:function UnaryExpression(node){var ancestors=context.getAncestors(),parent=ancestors.pop(),grandparent=ancestors.pop();// Exit early if it's guaranteed not to match\nif(node.operator!==\"!\"||parent.type!==\"UnaryExpression\"||parent.operator!==\"!\"){return;}if(isInBooleanContext(parent,grandparent)||// Boolean(<bool>) and new Boolean(<bool>)\n(grandparent.type===\"CallExpression\"||grandparent.type===\"NewExpression\")&&grandparent.callee.type===\"Identifier\"&&grandparent.callee.name===\"Boolean\"){context.report({node:node,message:\"Redundant double negation.\",fix:function fix(fixer){return fixer.replaceText(parent,sourceCode.getText(node.argument));}});}},CallExpression:function CallExpression(node){var parent=node.parent;if(node.callee.type!==\"Identifier\"||node.callee.name!==\"Boolean\"){return;}if(isInBooleanContext(node,parent)){context.report({node:node,message:\"Redundant Boolean call.\",fix:function fix(fixer){if(!node.arguments.length){return fixer.replaceText(parent,\"true\");}if(node.arguments.length>1||node.arguments[0].type===\"SpreadElement\"){return null;}var argument=node.arguments[0];if(astUtils.getPrecedence(argument)<astUtils.getPrecedence(node.parent)){return fixer.replaceText(node,\"(\"+sourceCode.getText(argument)+\")\");}return fixer.replaceText(node,sourceCode.getText(argument));}});}}};}};},{\"../ast-utils\":605}],715:[function(require,module,exports){/**\n * @fileoverview Rule to disallow unnecessary labels\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unnecessary labels\",category:\"Best Practices\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();var scopeInfo=null;/**\n         * Creates a new scope with a breakable statement.\n         *\n         * @param {ASTNode} node - A node to create. This is a BreakableStatement.\n         * @returns {void}\n         */function enterBreakableStatement(node){scopeInfo={label:node.parent.type===\"LabeledStatement\"?node.parent.label:null,breakable:true,upper:scopeInfo};}/**\n         * Removes the top scope of the stack.\n         *\n         * @returns {void}\n         */function exitBreakableStatement(){scopeInfo=scopeInfo.upper;}/**\n         * Creates a new scope with a labeled statement.\n         *\n         * This ignores it if the body is a breakable statement.\n         * In this case it's handled in the `enterBreakableStatement` function.\n         *\n         * @param {ASTNode} node - A node to create. This is a LabeledStatement.\n         * @returns {void}\n         */function enterLabeledStatement(node){if(!astUtils.isBreakableStatement(node.body)){scopeInfo={label:node.label,breakable:false,upper:scopeInfo};}}/**\n         * Removes the top scope of the stack.\n         *\n         * This ignores it if the body is a breakable statement.\n         * In this case it's handled in the `exitBreakableStatement` function.\n         *\n         * @param {ASTNode} node - A node. This is a LabeledStatement.\n         * @returns {void}\n         */function exitLabeledStatement(node){if(!astUtils.isBreakableStatement(node.body)){scopeInfo=scopeInfo.upper;}}/**\n         * Reports a given control node if it's unnecessary.\n         *\n         * @param {ASTNode} node - A node. This is a BreakStatement or a\n         *      ContinueStatement.\n         * @returns {void}\n         */function reportIfUnnecessary(node){if(!node.label){return;}var labelNode=node.label;for(var info=scopeInfo;info!==null;info=info.upper){if(info.breakable||info.label&&info.label.name===labelNode.name){if(info.breakable&&info.label&&info.label.name===labelNode.name){context.report({node:labelNode,message:\"This label '{{name}}' is unnecessary.\",data:labelNode,fix:function fix(fixer){return fixer.removeRange([sourceCode.getFirstToken(node).range[1],labelNode.range[1]]);}});}return;}}}return{WhileStatement:enterBreakableStatement,\"WhileStatement:exit\":exitBreakableStatement,DoWhileStatement:enterBreakableStatement,\"DoWhileStatement:exit\":exitBreakableStatement,ForStatement:enterBreakableStatement,\"ForStatement:exit\":exitBreakableStatement,ForInStatement:enterBreakableStatement,\"ForInStatement:exit\":exitBreakableStatement,ForOfStatement:enterBreakableStatement,\"ForOfStatement:exit\":exitBreakableStatement,SwitchStatement:enterBreakableStatement,\"SwitchStatement:exit\":exitBreakableStatement,LabeledStatement:enterLabeledStatement,\"LabeledStatement:exit\":exitLabeledStatement,BreakStatement:reportIfUnnecessary,ContinueStatement:reportIfUnnecessary};}};},{\"../ast-utils\":605}],716:[function(require,module,exports){/**\n * @fileoverview Disallow parenthesising higher precedence subexpressions.\n * @author Michael Ficarra\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils.js\");var esUtils=require(\"esutils\");module.exports={meta:{docs:{description:\"disallow unnecessary parentheses\",category:\"Possible Errors\",recommended:false},fixable:\"code\",schema:{anyOf:[{type:\"array\",items:[{enum:[\"functions\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"all\"]},{type:\"object\",properties:{conditionalAssign:{type:\"boolean\"},nestedBinaryExpressions:{type:\"boolean\"},returnAssign:{type:\"boolean\"},ignoreJSX:{enum:[\"none\",\"all\",\"single-line\",\"multi-line\"]}},additionalProperties:false}],minItems:0,maxItems:2}]}},create:function create(context){var sourceCode=context.getSourceCode();var tokensToIgnore=new _weakSet2.default();var isParenthesised=astUtils.isParenthesised.bind(astUtils,sourceCode);var precedence=astUtils.getPrecedence;var ALL_NODES=context.options[0]!==\"functions\";var EXCEPT_COND_ASSIGN=ALL_NODES&&context.options[1]&&context.options[1].conditionalAssign===false;var NESTED_BINARY=ALL_NODES&&context.options[1]&&context.options[1].nestedBinaryExpressions===false;var EXCEPT_RETURN_ASSIGN=ALL_NODES&&context.options[1]&&context.options[1].returnAssign===false;var IGNORE_JSX=ALL_NODES&&context.options[1]&&context.options[1].ignoreJSX;var PRECEDENCE_OF_ASSIGNMENT_EXPR=precedence({type:\"AssignmentExpression\"});var PRECEDENCE_OF_UPDATE_EXPR=precedence({type:\"UpdateExpression\"});/**\n         * Determines if this rule should be enforced for a node given the current configuration.\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the rule should be enforced for this node.\n         * @private\n         */function ruleApplies(node){if(node.type===\"JSXElement\"){var isSingleLine=node.loc.start.line===node.loc.end.line;switch(IGNORE_JSX){// Exclude this JSX element from linting\ncase\"all\":return false;// Exclude this JSX element if it is multi-line element\ncase\"multi-line\":return isSingleLine;// Exclude this JSX element if it is single-line element\ncase\"single-line\":return!isSingleLine;// Nothing special to be done for JSX elements\ncase\"none\":break;// no default\n}}return ALL_NODES||node.type===\"FunctionExpression\"||node.type===\"ArrowFunctionExpression\";}/**\n         * Determines if a node is surrounded by parentheses twice.\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the node is doubly parenthesised.\n         * @private\n         */function isParenthesisedTwice(node){var previousToken=sourceCode.getTokenBefore(node,1),nextToken=sourceCode.getTokenAfter(node,1);return isParenthesised(node)&&previousToken&&nextToken&&astUtils.isOpeningParenToken(previousToken)&&previousToken.range[1]<=node.range[0]&&astUtils.isClosingParenToken(nextToken)&&nextToken.range[0]>=node.range[1];}/**\n         * Determines if a node is surrounded by (potentially) invalid parentheses.\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the node is incorrectly parenthesised.\n         * @private\n         */function hasExcessParens(node){return ruleApplies(node)&&isParenthesised(node);}/**\n         * Determines if a node that is expected to be parenthesised is surrounded by\n         * (potentially) invalid extra parentheses.\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the node is has an unexpected extra pair of parentheses.\n         * @private\n         */function hasDoubleExcessParens(node){return ruleApplies(node)&&isParenthesisedTwice(node);}/**\n         * Determines if a node test expression is allowed to have a parenthesised assignment\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the assignment can be parenthesised.\n         * @private\n         */function isCondAssignException(node){return EXCEPT_COND_ASSIGN&&node.test.type===\"AssignmentExpression\";}/**\n         * Determines if a node is in a return statement\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the node is in a return statement.\n         * @private\n         */function isInReturnStatement(node){while(node){if(node.type===\"ReturnStatement\"||node.type===\"ArrowFunctionExpression\"&&node.body.type!==\"BlockStatement\"){return true;}node=node.parent;}return false;}/**\n         * Determines if a constructor function is newed-up with parens\n         * @param {ASTNode} newExpression - The NewExpression node to be checked.\n         * @returns {boolean} True if the constructor is called with parens.\n         * @private\n         */function isNewExpressionWithParens(newExpression){var lastToken=sourceCode.getLastToken(newExpression);var penultimateToken=sourceCode.getTokenBefore(lastToken);return newExpression.arguments.length>0||astUtils.isOpeningParenToken(penultimateToken)&&astUtils.isClosingParenToken(lastToken);}/**\n         * Determines if a node is or contains an assignment expression\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the node is or contains an assignment expression.\n         * @private\n         */function containsAssignment(node){if(node.type===\"AssignmentExpression\"){return true;}else if(node.type===\"ConditionalExpression\"&&(node.consequent.type===\"AssignmentExpression\"||node.alternate.type===\"AssignmentExpression\")){return true;}else if(node.left&&node.left.type===\"AssignmentExpression\"||node.right&&node.right.type===\"AssignmentExpression\"){return true;}return false;}/**\n         * Determines if a node is contained by or is itself a return statement and is allowed to have a parenthesised assignment\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the assignment can be parenthesised.\n         * @private\n         */function isReturnAssignException(node){if(!EXCEPT_RETURN_ASSIGN||!isInReturnStatement(node)){return false;}if(node.type===\"ReturnStatement\"){return node.argument&&containsAssignment(node.argument);}else if(node.type===\"ArrowFunctionExpression\"&&node.body.type!==\"BlockStatement\"){return containsAssignment(node.body);}return containsAssignment(node);}/**\n         * Determines if a node following a [no LineTerminator here] restriction is\n         * surrounded by (potentially) invalid extra parentheses.\n         * @param {Token} token - The token preceding the [no LineTerminator here] restriction.\n         * @param {ASTNode} node - The node to be checked.\n         * @returns {boolean} True if the node is incorrectly parenthesised.\n         * @private\n         */function hasExcessParensNoLineTerminator(token,node){if(token.loc.end.line===node.loc.start.line){return hasExcessParens(node);}return hasDoubleExcessParens(node);}/**\n         * Determines whether a node should be preceded by an additional space when removing parens\n         * @param {ASTNode} node node to evaluate; must be surrounded by parentheses\n         * @returns {boolean} `true` if a space should be inserted before the node\n         * @private\n         */function requiresLeadingSpace(node){var leftParenToken=sourceCode.getTokenBefore(node);var tokenBeforeLeftParen=sourceCode.getTokenBefore(node,1);var firstToken=sourceCode.getFirstToken(node);// If there is already whitespace before the previous token, don't add more.\nif(!tokenBeforeLeftParen||tokenBeforeLeftParen.end!==leftParenToken.start){return false;}// If the parens are preceded by a keyword (e.g. `typeof(0)`), a space should be inserted (`typeof 0`)\nvar precededByIdentiferPart=esUtils.code.isIdentifierPartES6(tokenBeforeLeftParen.value.slice(-1).charCodeAt(0));// However, a space should not be inserted unless the first character of the token is an identifier part\n// e.g. `typeof([])` should be fixed to `typeof[]`\nvar startsWithIdentifierPart=esUtils.code.isIdentifierPartES6(firstToken.value.charCodeAt(0));// If the parens are preceded by and start with a unary plus/minus (e.g. `+(+foo)`), a space should be inserted (`+ +foo`)\nvar precededByUnaryPlus=tokenBeforeLeftParen.type===\"Punctuator\"&&tokenBeforeLeftParen.value===\"+\";var precededByUnaryMinus=tokenBeforeLeftParen.type===\"Punctuator\"&&tokenBeforeLeftParen.value===\"-\";var startsWithUnaryPlus=firstToken.type===\"Punctuator\"&&firstToken.value===\"+\";var startsWithUnaryMinus=firstToken.type===\"Punctuator\"&&firstToken.value===\"-\";return precededByIdentiferPart&&startsWithIdentifierPart||precededByUnaryPlus&&startsWithUnaryPlus||precededByUnaryMinus&&startsWithUnaryMinus;}/**\n         * Report the node\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function report(node){var leftParenToken=sourceCode.getTokenBefore(node);var rightParenToken=sourceCode.getTokenAfter(node);if(tokensToIgnore.has(sourceCode.getFirstToken(node))&&!isParenthesisedTwice(node)){return;}context.report({node:node,loc:leftParenToken.loc.start,message:\"Gratuitous parentheses around expression.\",fix:function fix(fixer){var parenthesizedSource=sourceCode.text.slice(leftParenToken.range[1],rightParenToken.range[0]);return fixer.replaceTextRange([leftParenToken.range[0],rightParenToken.range[1]],(requiresLeadingSpace(node)?\" \":\"\")+parenthesizedSource);}});}/**\n         * Evaluate Unary update\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkUnaryUpdate(node){if(node.type===\"UnaryExpression\"&&node.argument.type===\"BinaryExpression\"&&node.argument.operator===\"**\"){return;}if(hasExcessParens(node.argument)&&precedence(node.argument)>=precedence(node)){report(node.argument);}}/**\n         * Evaluate a new call\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkCallNew(node){if(hasExcessParens(node.callee)&&precedence(node.callee)>=precedence(node)&&!(node.type===\"CallExpression\"&&(node.callee.type===\"FunctionExpression\"||node.callee.type===\"NewExpression\"&&!isNewExpressionWithParens(node.callee))&&// One set of parentheses are allowed for a function expression\n!hasDoubleExcessParens(node.callee))){report(node.callee);}if(node.arguments.length===1){if(hasDoubleExcessParens(node.arguments[0])&&precedence(node.arguments[0])>=PRECEDENCE_OF_ASSIGNMENT_EXPR){report(node.arguments[0]);}}else{[].forEach.call(node.arguments,function(arg){if(hasExcessParens(arg)&&precedence(arg)>=PRECEDENCE_OF_ASSIGNMENT_EXPR){report(arg);}});}}/**\n         * Evaluate binary logicals\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkBinaryLogical(node){var prec=precedence(node);var leftPrecedence=precedence(node.left);var rightPrecedence=precedence(node.right);var isExponentiation=node.operator===\"**\";var shouldSkipLeft=NESTED_BINARY&&(node.left.type===\"BinaryExpression\"||node.left.type===\"LogicalExpression\")||node.left.type===\"UnaryExpression\"&&isExponentiation;var shouldSkipRight=NESTED_BINARY&&(node.right.type===\"BinaryExpression\"||node.right.type===\"LogicalExpression\");if(!shouldSkipLeft&&hasExcessParens(node.left)&&(leftPrecedence>prec||leftPrecedence===prec&&!isExponentiation)){report(node.left);}if(!shouldSkipRight&&hasExcessParens(node.right)&&(rightPrecedence>prec||rightPrecedence===prec&&isExponentiation)){report(node.right);}}/**\n         * Check the parentheses around the super class of the given class definition.\n         * @param {ASTNode} node The node of class declarations to check.\n         * @returns {void}\n         */function checkClass(node){if(!node.superClass){return;}// If `node.superClass` is a LeftHandSideExpression, parentheses are extra.\n// Otherwise, parentheses are needed.\nvar hasExtraParens=precedence(node.superClass)>PRECEDENCE_OF_UPDATE_EXPR?hasExcessParens(node.superClass):hasDoubleExcessParens(node.superClass);if(hasExtraParens){report(node.superClass);}}/**\n         * Check the parentheses around the argument of the given spread operator.\n         * @param {ASTNode} node The node of spread elements/properties to check.\n         * @returns {void}\n         */function checkSpreadOperator(node){var hasExtraParens=precedence(node.argument)>=PRECEDENCE_OF_ASSIGNMENT_EXPR?hasExcessParens(node.argument):hasDoubleExcessParens(node.argument);if(hasExtraParens){report(node.argument);}}/**\n         * Checks the parentheses for an ExpressionStatement or ExportDefaultDeclaration\n         * @param {ASTNode} node The ExpressionStatement.expression or ExportDefaultDeclaration.declaration node\n         * @returns {void}\n         */function checkExpressionOrExportStatement(node){var firstToken=isParenthesised(node)?sourceCode.getTokenBefore(node):sourceCode.getFirstToken(node);var secondToken=sourceCode.getTokenAfter(firstToken,astUtils.isNotOpeningParenToken);if(astUtils.isOpeningParenToken(firstToken)&&(astUtils.isOpeningBraceToken(secondToken)||secondToken.type===\"Keyword\"&&(secondToken.value===\"function\"||secondToken.value===\"class\"||secondToken.value===\"let\"&&astUtils.isOpeningBracketToken(sourceCode.getTokenAfter(secondToken))))){tokensToIgnore.add(secondToken);}if(hasExcessParens(node)){report(node);}}return{ArrayExpression:function ArrayExpression(node){[].forEach.call(node.elements,function(e){if(e&&hasExcessParens(e)&&precedence(e)>=PRECEDENCE_OF_ASSIGNMENT_EXPR){report(e);}});},ArrowFunctionExpression:function ArrowFunctionExpression(node){if(isReturnAssignException(node)){return;}if(node.body.type!==\"BlockStatement\"){var firstBodyToken=sourceCode.getFirstToken(node.body,astUtils.isNotOpeningParenToken);var tokenBeforeFirst=sourceCode.getTokenBefore(firstBodyToken);if(astUtils.isOpeningParenToken(tokenBeforeFirst)&&astUtils.isOpeningBraceToken(firstBodyToken)){tokensToIgnore.add(firstBodyToken);}if(hasExcessParens(node.body)&&precedence(node.body)>=PRECEDENCE_OF_ASSIGNMENT_EXPR){report(node.body);}}},AssignmentExpression:function AssignmentExpression(node){if(isReturnAssignException(node)){return;}if(hasExcessParens(node.right)&&precedence(node.right)>=precedence(node)){report(node.right);}},BinaryExpression:checkBinaryLogical,CallExpression:checkCallNew,ConditionalExpression:function ConditionalExpression(node){if(isReturnAssignException(node)){return;}if(hasExcessParens(node.test)&&precedence(node.test)>=precedence({type:\"LogicalExpression\",operator:\"||\"})){report(node.test);}if(hasExcessParens(node.consequent)&&precedence(node.consequent)>=PRECEDENCE_OF_ASSIGNMENT_EXPR){report(node.consequent);}if(hasExcessParens(node.alternate)&&precedence(node.alternate)>=PRECEDENCE_OF_ASSIGNMENT_EXPR){report(node.alternate);}},DoWhileStatement:function DoWhileStatement(node){if(hasDoubleExcessParens(node.test)&&!isCondAssignException(node)){report(node.test);}},ExportDefaultDeclaration:function ExportDefaultDeclaration(node){return checkExpressionOrExportStatement(node.declaration);},ExpressionStatement:function ExpressionStatement(node){return checkExpressionOrExportStatement(node.expression);},ForInStatement:function ForInStatement(node){if(hasExcessParens(node.right)){report(node.right);}},ForOfStatement:function ForOfStatement(node){if(hasExcessParens(node.right)){report(node.right);}},ForStatement:function ForStatement(node){if(node.init&&hasExcessParens(node.init)){report(node.init);}if(node.test&&hasExcessParens(node.test)&&!isCondAssignException(node)){report(node.test);}if(node.update&&hasExcessParens(node.update)){report(node.update);}},IfStatement:function IfStatement(node){if(hasDoubleExcessParens(node.test)&&!isCondAssignException(node)){report(node.test);}},LogicalExpression:checkBinaryLogical,MemberExpression:function MemberExpression(node){if(hasExcessParens(node.object)&&precedence(node.object)>=precedence(node)&&(node.computed||!(astUtils.isDecimalInteger(node.object)||// RegExp literal is allowed to have parens (#1589)\nnode.object.type===\"Literal\"&&node.object.regex))){report(node.object);}if(node.computed&&hasExcessParens(node.property)){report(node.property);}},NewExpression:checkCallNew,ObjectExpression:function ObjectExpression(node){[].forEach.call(node.properties,function(e){var v=e.value;if(v&&hasExcessParens(v)&&precedence(v)>=PRECEDENCE_OF_ASSIGNMENT_EXPR){report(v);}});},ReturnStatement:function ReturnStatement(node){var returnToken=sourceCode.getFirstToken(node);if(isReturnAssignException(node)){return;}if(node.argument&&hasExcessParensNoLineTerminator(returnToken,node.argument)&&// RegExp literal is allowed to have parens (#1589)\n!(node.argument.type===\"Literal\"&&node.argument.regex)){report(node.argument);}},SequenceExpression:function SequenceExpression(node){[].forEach.call(node.expressions,function(e){if(hasExcessParens(e)&&precedence(e)>=precedence(node)){report(e);}});},SwitchCase:function SwitchCase(node){if(node.test&&hasExcessParens(node.test)){report(node.test);}},SwitchStatement:function SwitchStatement(node){if(hasDoubleExcessParens(node.discriminant)){report(node.discriminant);}},ThrowStatement:function ThrowStatement(node){var throwToken=sourceCode.getFirstToken(node);if(hasExcessParensNoLineTerminator(throwToken,node.argument)){report(node.argument);}},UnaryExpression:checkUnaryUpdate,UpdateExpression:checkUnaryUpdate,AwaitExpression:checkUnaryUpdate,VariableDeclarator:function VariableDeclarator(node){if(node.init&&hasExcessParens(node.init)&&precedence(node.init)>=PRECEDENCE_OF_ASSIGNMENT_EXPR&&// RegExp literal is allowed to have parens (#1589)\n!(node.init.type===\"Literal\"&&node.init.regex)){report(node.init);}},WhileStatement:function WhileStatement(node){if(hasDoubleExcessParens(node.test)&&!isCondAssignException(node)){report(node.test);}},WithStatement:function WithStatement(node){if(hasDoubleExcessParens(node.object)){report(node.object);}},YieldExpression:function YieldExpression(node){if(node.argument){var yieldToken=sourceCode.getFirstToken(node);if(precedence(node.argument)>=precedence(node)&&hasExcessParensNoLineTerminator(yieldToken,node.argument)||hasDoubleExcessParens(node.argument)){report(node.argument);}}},ClassDeclaration:checkClass,ClassExpression:checkClass,SpreadElement:checkSpreadOperator,SpreadProperty:checkSpreadOperator,ExperimentalSpreadProperty:checkSpreadOperator};}};},{\"../ast-utils.js\":605,\"esutils\":365}],717:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of unnecessary semicolons\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar FixTracker=require(\"../util/fix-tracker\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unnecessary semicolons\",category:\"Possible Errors\",recommended:true},fixable:\"code\",schema:[]},create:function create(context){var sourceCode=context.getSourceCode();/**\n         * Reports an unnecessary semicolon error.\n         * @param {Node|Token} nodeOrToken - A node or a token to be reported.\n         * @returns {void}\n         */function report(nodeOrToken){context.report({node:nodeOrToken,message:\"Unnecessary semicolon.\",fix:function fix(fixer){// Expand the replacement range to include the surrounding\n// tokens to avoid conflicting with semi.\n// https://github.com/eslint/eslint/issues/7928\nreturn new FixTracker(fixer,context.getSourceCode()).retainSurroundingTokens(nodeOrToken).remove(nodeOrToken);}});}/**\n         * Checks for a part of a class body.\n         * This checks tokens from a specified token to a next MethodDefinition or the end of class body.\n         *\n         * @param {Token} firstToken - The first token to check.\n         * @returns {void}\n         */function checkForPartOfClassBody(firstToken){for(var token=firstToken;token.type===\"Punctuator\"&&!astUtils.isClosingBraceToken(token);token=sourceCode.getTokenAfter(token)){if(astUtils.isSemicolonToken(token)){report(token);}}}return{/**\n             * Reports this empty statement, except if the parent node is a loop.\n             * @param {Node} node - A EmptyStatement node to be reported.\n             * @returns {void}\n             */EmptyStatement:function EmptyStatement(node){var parent=node.parent,allowedParentTypes=[\"ForStatement\",\"ForInStatement\",\"ForOfStatement\",\"WhileStatement\",\"DoWhileStatement\",\"IfStatement\",\"LabeledStatement\",\"WithStatement\"];if(allowedParentTypes.indexOf(parent.type)===-1){report(node);}},/**\n             * Checks tokens from the head of this class body to the first MethodDefinition or the end of this class body.\n             * @param {Node} node - A ClassBody node to check.\n             * @returns {void}\n             */ClassBody:function ClassBody(node){checkForPartOfClassBody(sourceCode.getFirstToken(node,1));// 0 is `{`.\n},/**\n             * Checks tokens from this MethodDefinition to the next MethodDefinition or the end of this class body.\n             * @param {Node} node - A MethodDefinition node of the start point.\n             * @returns {void}\n             */MethodDefinition:function MethodDefinition(node){checkForPartOfClassBody(sourceCode.getTokenAfter(node));}};}};},{\"../ast-utils\":605,\"../util/fix-tracker\":879}],718:[function(require,module,exports){/**\n * @fileoverview Rule to flag fall-through cases in switch statements.\n * @author Matt DuVall <http://mattduvall.com/>\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar lodash=require(\"lodash\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar DEFAULT_FALLTHROUGH_COMMENT=/falls?\\s?through/i;/**\n * Checks whether or not a given node has a fallthrough comment.\n * @param {ASTNode} node - A SwitchCase node to get comments.\n * @param {RuleContext} context - A rule context which stores comments.\n * @param {RegExp} fallthroughCommentPattern - A pattern to match comment to.\n * @returns {boolean} `true` if the node has a valid fallthrough comment.\n */function hasFallthroughComment(node,context,fallthroughCommentPattern){var sourceCode=context.getSourceCode();var comment=lodash.last(sourceCode.getComments(node).leading);return Boolean(comment&&fallthroughCommentPattern.test(comment.value));}/**\n * Checks whether or not a given code path segment is reachable.\n * @param {CodePathSegment} segment - A CodePathSegment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */function isReachable(segment){return segment.reachable;}/**\n * Checks whether a node and a token are separated by blank lines\n * @param {ASTNode} node - The node to check\n * @param {Token} token - The token to compare against\n * @returns {boolean} `true` if there are blank lines between node and token\n */function hasBlankLinesBetween(node,token){return token.loc.start.line>node.loc.end.line+1;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow fallthrough of `case` statements\",category:\"Best Practices\",recommended:true},schema:[{type:\"object\",properties:{commentPattern:{type:\"string\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var currentCodePath=null;var sourceCode=context.getSourceCode();/*\n         * We need to use leading comments of the next SwitchCase node because\n         * trailing comments is wrong if semicolons are omitted.\n         */var fallthroughCase=null;var fallthroughCommentPattern=null;if(options.commentPattern){fallthroughCommentPattern=new RegExp(options.commentPattern);}else{fallthroughCommentPattern=DEFAULT_FALLTHROUGH_COMMENT;}return{onCodePathStart:function onCodePathStart(codePath){currentCodePath=codePath;},onCodePathEnd:function onCodePathEnd(){currentCodePath=currentCodePath.upper;},SwitchCase:function SwitchCase(node){/*\n                 * Checks whether or not there is a fallthrough comment.\n                 * And reports the previous fallthrough node if that does not exist.\n                 */if(fallthroughCase&&!hasFallthroughComment(node,context,fallthroughCommentPattern)){context.report({message:\"Expected a 'break' statement before '{{type}}'.\",data:{type:node.test?\"case\":\"default\"},node:node});}fallthroughCase=null;},\"SwitchCase:exit\":function SwitchCaseExit(node){var nextToken=sourceCode.getTokenAfter(node);/*\n                 * `reachable` meant fall through because statements preceded by\n                 * `break`, `return`, or `throw` are unreachable.\n                 * And allows empty cases and the last case.\n                 */if(currentCodePath.currentSegments.some(isReachable)&&(node.consequent.length>0||hasBlankLinesBetween(node,nextToken))&&lodash.last(node.parent.cases)!==node){fallthroughCase=node;}}};}};},{\"lodash\":566}],719:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of a leading/trailing decimal point in a numeric literal\n * @author James Allardice\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow leading or trailing decimal points in numeric literals\",category:\"Best Practices\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){return{Literal:function Literal(node){if(typeof node.value===\"number\"){if(node.raw.indexOf(\".\")===0){context.report({node:node,message:\"A leading decimal point can be confused with a dot.\",fix:function fix(fixer){return fixer.insertTextBefore(node,\"0\");}});}if(node.raw.indexOf(\".\")===node.raw.length-1){context.report({node:node,message:\"A trailing decimal point can be confused with a dot.\",fix:function fix(fixer){return fixer.insertTextAfter(node,\"0\");}});}}}};}};},{}],720:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of function declaration identifiers as variables.\n * @author Ian Christian Myers\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow reassigning `function` declarations\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){/**\n         * Reports a reference if is non initializer and writable.\n         * @param {References} references - Collection of reference to check.\n         * @returns {void}\n         */function checkReference(references){astUtils.getModifyingReferences(references).forEach(function(reference){context.report({node:reference.identifier,message:\"'{{name}}' is a function.\",data:{name:reference.identifier.name}});});}/**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable - A variable to check.\n         * @returns {void}\n         */function checkVariable(variable){if(variable.defs[0].type===\"FunctionName\"){checkReference(variable.references);}}/**\n         * Checks parameters of a given function node.\n         * @param {ASTNode} node - A function node to check.\n         * @returns {void}\n         */function checkForFunction(node){context.getDeclaredVariables(node).forEach(checkVariable);}return{FunctionDeclaration:checkForFunction,FunctionExpression:checkForFunction};}};},{\"../ast-utils\":605}],721:[function(require,module,exports){/**\n * @fileoverview Rule to disallow assignments to native objects or read-only global variables\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow assignments to native objects or read-only global variables\",category:\"Best Practices\",recommended:true},schema:[{type:\"object\",properties:{exceptions:{type:\"array\",items:{type:\"string\"},uniqueItems:true}},additionalProperties:false}]},create:function create(context){var config=context.options[0];var exceptions=config&&config.exceptions||[];/**\n         * Reports write references.\n         * @param {Reference} reference - A reference to check.\n         * @param {int} index - The index of the reference in the references.\n         * @param {Reference[]} references - The array that the reference belongs to.\n         * @returns {void}\n         */function checkReference(reference,index,references){var identifier=reference.identifier;if(reference.init===false&&reference.isWrite()&&(// Destructuring assignments can have multiple default value,\n// so possibly there are multiple writeable references for the same identifier.\nindex===0||references[index-1].identifier!==identifier)){context.report({node:identifier,message:\"Read-only global '{{name}}' should not be modified.\",data:identifier});}}/**\n         * Reports write references if a given variable is read-only builtin.\n         * @param {Variable} variable - A variable to check.\n         * @returns {void}\n         */function checkVariable(variable){if(variable.writeable===false&&exceptions.indexOf(variable.name)===-1){variable.references.forEach(checkReference);}}return{Program:function Program(){var globalScope=context.getScope();globalScope.variables.forEach(checkVariable);}};}};},{}],722:[function(require,module,exports){/**\n * @fileoverview A rule to disallow the type conversions with shorter notations.\n * @author Toru Nagashima\n */\"use strict\";var astUtils=require(\"../ast-utils\");var esUtils=require(\"esutils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar INDEX_OF_PATTERN=/^(?:i|lastI)ndexOf$/;var ALLOWABLE_OPERATORS=[\"~\",\"!!\",\"+\",\"*\"];/**\n * Parses and normalizes an option object.\n * @param {Object} options - An option object to parse.\n * @returns {Object} The parsed and normalized option object.\n */function parseOptions(options){options=options||{};return{boolean:\"boolean\"in options?Boolean(options.boolean):true,number:\"number\"in options?Boolean(options.number):true,string:\"string\"in options?Boolean(options.string):true,allow:options.allow||[]};}/**\n * Checks whether or not a node is a double logical nigating.\n * @param {ASTNode} node - An UnaryExpression node to check.\n * @returns {boolean} Whether or not the node is a double logical nigating.\n */function isDoubleLogicalNegating(node){return node.operator===\"!\"&&node.argument.type===\"UnaryExpression\"&&node.argument.operator===\"!\";}/**\n * Checks whether or not a node is a binary negating of `.indexOf()` method calling.\n * @param {ASTNode} node - An UnaryExpression node to check.\n * @returns {boolean} Whether or not the node is a binary negating of `.indexOf()` method calling.\n */function isBinaryNegatingOfIndexOf(node){return node.operator===\"~\"&&node.argument.type===\"CallExpression\"&&node.argument.callee.type===\"MemberExpression\"&&node.argument.callee.property.type===\"Identifier\"&&INDEX_OF_PATTERN.test(node.argument.callee.property.name);}/**\n * Checks whether or not a node is a multiplying by one.\n * @param {BinaryExpression} node - A BinaryExpression node to check.\n * @returns {boolean} Whether or not the node is a multiplying by one.\n */function isMultiplyByOne(node){return node.operator===\"*\"&&(node.left.type===\"Literal\"&&node.left.value===1||node.right.type===\"Literal\"&&node.right.value===1);}/**\n * Checks whether the result of a node is numeric or not\n * @param {ASTNode} node The node to test\n * @returns {boolean} true if the node is a number literal or a `Number()`, `parseInt` or `parseFloat` call\n */function isNumeric(node){return node.type===\"Literal\"&&typeof node.value===\"number\"||node.type===\"CallExpression\"&&(node.callee.name===\"Number\"||node.callee.name===\"parseInt\"||node.callee.name===\"parseFloat\");}/**\n * Returns the first non-numeric operand in a BinaryExpression. Designed to be\n * used from bottom to up since it walks up the BinaryExpression trees using\n * node.parent to find the result.\n * @param {BinaryExpression} node The BinaryExpression node to be walked up on\n * @returns {ASTNode|null} The first non-numeric item in the BinaryExpression tree or null\n */function getNonNumericOperand(node){var left=node.left,right=node.right;if(right.type!==\"BinaryExpression\"&&!isNumeric(right)){return right;}if(left.type!==\"BinaryExpression\"&&!isNumeric(left)){return left;}return null;}/**\n * Checks whether a node is an empty string literal or not.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} Whether or not the passed in node is an\n * empty string literal or not.\n */function isEmptyString(node){return astUtils.isStringLiteral(node)&&(node.value===\"\"||node.type===\"TemplateLiteral\"&&node.quasis.length===1&&node.quasis[0].value.cooked===\"\");}/**\n * Checks whether or not a node is a concatenating with an empty string.\n * @param {ASTNode} node - A BinaryExpression node to check.\n * @returns {boolean} Whether or not the node is a concatenating with an empty string.\n */function isConcatWithEmptyString(node){return node.operator===\"+\"&&(isEmptyString(node.left)&&!astUtils.isStringLiteral(node.right)||isEmptyString(node.right)&&!astUtils.isStringLiteral(node.left));}/**\n * Checks whether or not a node is appended with an empty string.\n * @param {ASTNode} node - An AssignmentExpression node to check.\n * @returns {boolean} Whether or not the node is appended with an empty string.\n */function isAppendEmptyString(node){return node.operator===\"+=\"&&isEmptyString(node.right);}/**\n * Returns the operand that is not an empty string from a flagged BinaryExpression.\n * @param {ASTNode} node - The flagged BinaryExpression node to check.\n * @returns {ASTNode} The operand that is not an empty string from a flagged BinaryExpression.\n */function getNonEmptyOperand(node){return isEmptyString(node.left)?node.right:node.left;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow shorthand type conversions\",category:\"Best Practices\",recommended:false},fixable:\"code\",schema:[{type:\"object\",properties:{boolean:{type:\"boolean\"},number:{type:\"boolean\"},string:{type:\"boolean\"},allow:{type:\"array\",items:{enum:ALLOWABLE_OPERATORS},uniqueItems:true}},additionalProperties:false}]},create:function create(context){var options=parseOptions(context.options[0]);var sourceCode=context.getSourceCode();/**\n        * Reports an error and autofixes the node\n        * @param {ASTNode} node - An ast node to report the error on.\n        * @param {string} recommendation - The recommended code for the issue\n        * @param {bool} shouldFix - Whether this report should fix the node\n        * @returns {void}\n        */function report(node,recommendation,shouldFix){shouldFix=typeof shouldFix===\"undefined\"?true:shouldFix;context.report({node:node,message:\"use `{{recommendation}}` instead.\",data:{recommendation:recommendation},fix:function fix(fixer){if(!shouldFix){return null;}var tokenBefore=sourceCode.getTokenBefore(node);if(tokenBefore&&tokenBefore.range[1]===node.range[0]&&esUtils.code.isIdentifierPartES6(tokenBefore.value.slice(-1).charCodeAt(0))&&esUtils.code.isIdentifierPartES6(recommendation.charCodeAt(0))){return fixer.replaceText(node,\" \"+recommendation);}return fixer.replaceText(node,recommendation);}});}return{UnaryExpression:function UnaryExpression(node){var operatorAllowed=void 0;// !!foo\noperatorAllowed=options.allow.indexOf(\"!!\")>=0;if(!operatorAllowed&&options.boolean&&isDoubleLogicalNegating(node)){var recommendation=\"Boolean(\"+sourceCode.getText(node.argument.argument)+\")\";report(node,recommendation);}// ~foo.indexOf(bar)\noperatorAllowed=options.allow.indexOf(\"~\")>=0;if(!operatorAllowed&&options.boolean&&isBinaryNegatingOfIndexOf(node)){var _recommendation=sourceCode.getText(node.argument)+\" !== -1\";report(node,_recommendation,false);}// +foo\noperatorAllowed=options.allow.indexOf(\"+\")>=0;if(!operatorAllowed&&options.number&&node.operator===\"+\"&&!isNumeric(node.argument)){var _recommendation2=\"Number(\"+sourceCode.getText(node.argument)+\")\";report(node,_recommendation2);}},// Use `:exit` to prevent double reporting\n\"BinaryExpression:exit\":function BinaryExpressionExit(node){var operatorAllowed=void 0;// 1 * foo\noperatorAllowed=options.allow.indexOf(\"*\")>=0;var nonNumericOperand=!operatorAllowed&&options.number&&isMultiplyByOne(node)&&getNonNumericOperand(node);if(nonNumericOperand){var recommendation=\"Number(\"+sourceCode.getText(nonNumericOperand)+\")\";report(node,recommendation);}// \"\" + foo\noperatorAllowed=options.allow.indexOf(\"+\")>=0;if(!operatorAllowed&&options.string&&isConcatWithEmptyString(node)){var _recommendation3=\"String(\"+sourceCode.getText(getNonEmptyOperand(node))+\")\";report(node,_recommendation3);}},AssignmentExpression:function AssignmentExpression(node){// foo += \"\"\nvar operatorAllowed=options.allow.indexOf(\"+\")>=0;if(!operatorAllowed&&options.string&&isAppendEmptyString(node)){var code=sourceCode.getText(getNonEmptyOperand(node));var recommendation=code+\" = String(\"+code+\")\";report(node,recommendation);}}};}};},{\"../ast-utils\":605,\"esutils\":365}],723:[function(require,module,exports){/**\n * @fileoverview Rule to check for implicit global variables and functions.\n * @author Joshua Peek\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow variable and `function` declarations in the global scope\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{Program:function Program(){var scope=context.getScope();scope.variables.forEach(function(variable){if(variable.writeable){return;}variable.defs.forEach(function(def){if(def.type===\"FunctionName\"||def.type===\"Variable\"&&def.parent.kind===\"var\"){context.report({node:def.node,message:\"Implicit global variable, assign as global property instead.\"});}});});scope.implicit.variables.forEach(function(variable){var scopeVariable=scope.set.get(variable.name);if(scopeVariable&&scopeVariable.writeable){return;}variable.defs.forEach(function(def){context.report({node:def.node,message:\"Implicit global variable, assign as global property instead.\"});});});}};}};},{}],724:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of implied eval via setTimeout and setInterval\n * @author James Allardice\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `eval()`-like methods\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var CALLEE_RE=/^(setTimeout|setInterval|execScript)$/;/*\n         * Figures out if we should inspect a given binary expression. Is a stack\n         * of stacks, where the first element in each substack is a CallExpression.\n         */var impliedEvalAncestorsStack=[];//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Get the last element of an array, without modifying arr, like pop(), but non-destructive.\n         * @param {array} arr What to inspect\n         * @returns {*} The last element of arr\n         * @private\n         */function last(arr){return arr?arr[arr.length-1]:null;}/**\n         * Checks if the given MemberExpression node is a potentially implied eval identifier on window.\n         * @param {ASTNode} node The MemberExpression node to check.\n         * @returns {boolean} Whether or not the given node is potentially an implied eval.\n         * @private\n         */function isImpliedEvalMemberExpression(node){var object=node.object,property=node.property,hasImpliedEvalName=CALLEE_RE.test(property.name)||CALLEE_RE.test(property.value);return object.name===\"window\"&&hasImpliedEvalName;}/**\n         * Determines if a node represents a call to a potentially implied eval.\n         *\n         * This checks the callee name and that there's an argument, but not the type of the argument.\n         *\n         * @param {ASTNode} node The CallExpression to check.\n         * @returns {boolean} True if the node matches, false if not.\n         * @private\n         */function isImpliedEvalCallExpression(node){var isMemberExpression=node.callee.type===\"MemberExpression\",isIdentifier=node.callee.type===\"Identifier\",isImpliedEvalCallee=isIdentifier&&CALLEE_RE.test(node.callee.name)||isMemberExpression&&isImpliedEvalMemberExpression(node.callee);return isImpliedEvalCallee&&node.arguments.length;}/**\n         * Checks that the parent is a direct descendent of an potential implied eval CallExpression, and if the parent is a CallExpression, that we're the first argument.\n         * @param {ASTNode} node The node to inspect the parent of.\n         * @returns {boolean} Was the parent a direct descendent, and is the child therefore potentially part of a dangerous argument?\n         * @private\n         */function hasImpliedEvalParent(node){// make sure our parent is marked\nreturn node.parent===last(last(impliedEvalAncestorsStack))&&(// if our parent is a CallExpression, make sure we're the first argument\nnode.parent.type!==\"CallExpression\"||node===node.parent.arguments[0]);}/**\n         * Checks if our parent is marked as part of an implied eval argument. If\n         * so, collapses the top of impliedEvalAncestorsStack and reports on the\n         * original CallExpression.\n         * @param {ASTNode} node The CallExpression to check.\n         * @returns {boolean} True if the node matches, false if not.\n         * @private\n         */function checkString(node){if(hasImpliedEvalParent(node)){// remove the entire substack, to avoid duplicate reports\nvar substack=impliedEvalAncestorsStack.pop();context.report({node:substack[0],message:\"Implied eval. Consider passing a function instead of a string.\"});}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){if(isImpliedEvalCallExpression(node)){// call expressions create a new substack\nimpliedEvalAncestorsStack.push([node]);}},\"CallExpression:exit\":function CallExpressionExit(node){if(node===last(last(impliedEvalAncestorsStack))){/* Destroys the entire sub-stack, rather than just using\n                     * last(impliedEvalAncestorsStack).pop(), as a CallExpression is\n                     * always the bottom of a impliedEvalAncestorsStack substack.\n                     */impliedEvalAncestorsStack.pop();}},BinaryExpression:function BinaryExpression(node){if(node.operator===\"+\"&&hasImpliedEvalParent(node)){last(impliedEvalAncestorsStack).push(node);}},\"BinaryExpression:exit\":function BinaryExpressionExit(node){if(node===last(last(impliedEvalAncestorsStack))){last(impliedEvalAncestorsStack).pop();}},Literal:function Literal(node){if(typeof node.value===\"string\"){checkString(node);}},TemplateLiteral:function TemplateLiteral(node){checkString(node);}};}};},{}],725:[function(require,module,exports){/**\n * @fileoverview Enforces or disallows inline comments.\n * @author Greg Cochard\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow inline comments after code\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();/**\n         * Will check that comments are not on lines starting with or ending with code\n         * @param {ASTNode} node The comment node to check\n         * @private\n         * @returns {void}\n         */function testCodeAroundComment(node){// Get the whole line and cut it off at the start of the comment\nvar startLine=String(sourceCode.lines[node.loc.start.line-1]);var endLine=String(sourceCode.lines[node.loc.end.line-1]);var preamble=startLine.slice(0,node.loc.start.column).trim();// Also check after the comment\nvar postamble=endLine.slice(node.loc.end.column).trim();// Check that this comment isn't an ESLint directive\nvar isDirective=astUtils.isDirectiveComment(node);// Should be empty if there was only whitespace around the comment\nif(!isDirective&&(preamble||postamble)){context.report({node:node,message:\"Unexpected comment inline with code.\"});}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{LineComment:testCodeAroundComment,BlockComment:testCodeAroundComment};}};},{\"../ast-utils\":605}],726:[function(require,module,exports){/**\n * @fileoverview Rule to enforce declarations in program or function body root.\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow variable or `function` declarations in nested blocks\",category:\"Possible Errors\",recommended:true},schema:[{enum:[\"functions\",\"both\"]}]},create:function create(context){/**\n         * Find the nearest Program or Function ancestor node.\n         * @returns {Object} Ancestor's type and distance from node.\n         */function nearestBody(){var ancestors=context.getAncestors();var ancestor=ancestors.pop(),generation=1;while(ancestor&&[\"Program\",\"FunctionDeclaration\",\"FunctionExpression\",\"ArrowFunctionExpression\"].indexOf(ancestor.type)<0){generation+=1;ancestor=ancestors.pop();}return{// Type of containing ancestor\ntype:ancestor.type,// Separation between ancestor and node\ndistance:generation};}/**\n         * Ensure that a given node is at a program or function body's root.\n         * @param {ASTNode} node Declaration node to check.\n         * @returns {void}\n         */function check(node){var body=nearestBody(node),valid=body.type===\"Program\"&&body.distance===1||body.distance===2;if(!valid){context.report({node:node,message:\"Move {{type}} declaration to {{body}} root.\",data:{type:node.type===\"FunctionDeclaration\"?\"function\":\"variable\",body:body.type===\"Program\"?\"program\":\"function body\"}});}}return{FunctionDeclaration:check,VariableDeclaration:function VariableDeclaration(node){if(context.options[0]===\"both\"&&node.kind===\"var\"){check(node);}}};}};},{}],727:[function(require,module,exports){/**\n * @fileoverview Validate strings passed to the RegExp constructor\n * @author Michael Ficarra\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar parser=require(\"babel-eslint\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow invalid regular expression strings in `RegExp` constructors\",category:\"Possible Errors\",recommended:true},schema:[{type:\"object\",properties:{allowConstructorFlags:{type:\"array\",items:{type:\"string\"}}},additionalProperties:false}]},create:function create(context){var options=context.options[0];var allowedFlags=\"\";if(options&&options.allowConstructorFlags){allowedFlags=options.allowConstructorFlags.join(\"\");}/**\n         * Check if node is a string\n         * @param {ASTNode} node node to evaluate\n         * @returns {boolean} True if its a string\n         * @private\n         */function isString(node){return node&&node.type===\"Literal\"&&typeof node.value===\"string\";}/**\n         * Validate strings passed to the RegExp constructor\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function check(node){if(node.callee.type===\"Identifier\"&&node.callee.name===\"RegExp\"&&isString(node.arguments[0])){var flags=isString(node.arguments[1])?node.arguments[1].value:\"\";if(allowedFlags){flags=flags.replace(new RegExp(\"[\"+allowedFlags+\"]\",\"gi\"),\"\");}try{void new RegExp(node.arguments[0].value);}catch(e){context.report({node:node,message:\"{{message}}.\",data:e});}if(flags){try{parser.parse(\"/./\"+flags,context.parserOptions);}catch(ex){context.report({node:node,message:\"Invalid flags supplied to RegExp constructor '{{flags}}'.\",data:{flags:flags}});}}}}return{CallExpression:check,NewExpression:check};}};},{\"babel-eslint\":19}],728:[function(require,module,exports){/**\n * @fileoverview A rule to disallow `this` keywords outside of classes or class-like objects.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `this` keywords outside of classes or class-like objects\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var stack=[],sourceCode=context.getSourceCode();/**\n         * Gets the current checking context.\n         *\n         * The return value has a flag that whether or not `this` keyword is valid.\n         * The flag is initialized when got at the first time.\n         *\n         * @returns {{valid: boolean}}\n         *   an object which has a flag that whether or not `this` keyword is valid.\n         */stack.getCurrent=function(){var current=this[this.length-1];if(!current.init){current.init=true;current.valid=!astUtils.isDefaultThisBinding(current.node,sourceCode);}return current;};/**\n         * Pushs new checking context into the stack.\n         *\n         * The checking context is not initialized yet.\n         * Because most functions don't have `this` keyword.\n         * When `this` keyword was found, the checking context is initialized.\n         *\n         * @param {ASTNode} node - A function node that was entered.\n         * @returns {void}\n         */function enterFunction(node){// `this` can be invalid only under strict mode.\nstack.push({init:!context.getScope().isStrict,node:node,valid:true});}/**\n         * Pops the current checking context from the stack.\n         * @returns {void}\n         */function exitFunction(){stack.pop();}return{/*\n             * `this` is invalid only under strict mode.\n             * Modules is always strict mode.\n             */Program:function Program(node){var scope=context.getScope(),features=context.parserOptions.ecmaFeatures||{};stack.push({init:true,node:node,valid:!(scope.isStrict||node.sourceType===\"module\"||features.globalReturn&&scope.childScopes[0].isStrict)});},\"Program:exit\":function ProgramExit(){stack.pop();},FunctionDeclaration:enterFunction,\"FunctionDeclaration:exit\":exitFunction,FunctionExpression:enterFunction,\"FunctionExpression:exit\":exitFunction,// Reports if `this` of the current context is invalid.\nThisExpression:function ThisExpression(node){var current=stack.getCurrent();if(current&&!current.valid){context.report({node:node,message:\"Unexpected 'this'.\"});}}};}};},{\"../ast-utils\":605}],729:[function(require,module,exports){/**\n * @fileoverview Rule to disalow whitespace that is not a tab or space, whitespace inside strings and comments are allowed\n * @author Jonathan Kingston\n * @author Christophe Porteneuve\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\nvar ALL_IRREGULARS=/[\\f\\v\\u0085\\u00A0\\ufeff\\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u200b\\u202f\\u205f\\u3000\\u2028\\u2029]/;var IRREGULAR_WHITESPACE=/[\\f\\v\\u0085\\u00A0\\ufeff\\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u200b\\u202f\\u205f\\u3000]+/mg;var IRREGULAR_LINE_TERMINATORS=/[\\u2028\\u2029]/mg;var LINE_BREAK=astUtils.createGlobalLinebreakMatcher();//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow irregular whitespace outside of strings and comments\",category:\"Possible Errors\",recommended:true},schema:[{type:\"object\",properties:{skipComments:{type:\"boolean\"},skipStrings:{type:\"boolean\"},skipTemplates:{type:\"boolean\"},skipRegExps:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){// Module store of errors that we have found\nvar errors=[];// Comment nodes.  We accumulate these as we go, so we can be sure to trigger them after the whole `Program` entity is parsed, even for top-of-file comments.\nvar commentNodes=[];// Lookup the `skipComments` option, which defaults to `false`.\nvar options=context.options[0]||{};var skipComments=!!options.skipComments;var skipStrings=options.skipStrings!==false;var skipRegExps=!!options.skipRegExps;var skipTemplates=!!options.skipTemplates;var sourceCode=context.getSourceCode();/**\n         * Removes errors that occur inside a string node\n         * @param {ASTNode} node to check for matching errors.\n         * @returns {void}\n         * @private\n         */function removeWhitespaceError(node){var locStart=node.loc.start;var locEnd=node.loc.end;errors=errors.filter(function(error){var errorLoc=error[1];if(errorLoc.line>=locStart.line&&errorLoc.line<=locEnd.line){if(errorLoc.column>=locStart.column&&(errorLoc.column<=locEnd.column||errorLoc.line<locEnd.line)){return false;}}return true;});}/**\n         * Checks identifier or literal nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors\n         * @param {ASTNode} node to check for matching errors.\n         * @returns {void}\n         * @private\n         */function removeInvalidNodeErrorsInIdentifierOrLiteral(node){var shouldCheckStrings=skipStrings&&typeof node.value===\"string\";var shouldCheckRegExps=skipRegExps&&node.value instanceof RegExp;if(shouldCheckStrings||shouldCheckRegExps){// If we have irregular characters remove them from the errors list\nif(ALL_IRREGULARS.test(node.raw)){removeWhitespaceError(node);}}}/**\n         * Checks template string literal nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors\n         * @param {ASTNode} node to check for matching errors.\n         * @returns {void}\n         * @private\n         */function removeInvalidNodeErrorsInTemplateLiteral(node){if(typeof node.value.raw===\"string\"){if(ALL_IRREGULARS.test(node.value.raw)){removeWhitespaceError(node);}}}/**\n         * Checks comment nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors\n         * @param {ASTNode} node to check for matching errors.\n         * @returns {void}\n         * @private\n         */function removeInvalidNodeErrorsInComment(node){if(ALL_IRREGULARS.test(node.value)){removeWhitespaceError(node);}}/**\n         * Checks the program source for irregular whitespace\n         * @param {ASTNode} node The program node\n         * @returns {void}\n         * @private\n         */function checkForIrregularWhitespace(node){var sourceLines=sourceCode.lines;sourceLines.forEach(function(sourceLine,lineIndex){var lineNumber=lineIndex+1;var match=void 0;while((match=IRREGULAR_WHITESPACE.exec(sourceLine))!==null){var location={line:lineNumber,column:match.index};errors.push([node,location,\"Irregular whitespace not allowed.\"]);}});}/**\n         * Checks the program source for irregular line terminators\n         * @param {ASTNode} node The program node\n         * @returns {void}\n         * @private\n         */function checkForIrregularLineTerminators(node){var source=sourceCode.getText(),sourceLines=sourceCode.lines,linebreaks=source.match(LINE_BREAK);var lastLineIndex=-1,match=void 0;while((match=IRREGULAR_LINE_TERMINATORS.exec(source))!==null){var lineIndex=linebreaks.indexOf(match[0],lastLineIndex+1)||0;var location={line:lineIndex+1,column:sourceLines[lineIndex].length};errors.push([node,location,\"Irregular whitespace not allowed.\"]);lastLineIndex=lineIndex;}}/**\n         * Stores a comment node (`LineComment` or `BlockComment`) for later stripping of errors within; a necessary deferring of processing to deal with top-of-file comments.\n         * @param {ASTNode} node The comment node\n         * @returns {void}\n         * @private\n         */function rememberCommentNode(node){commentNodes.push(node);}/**\n         * A no-op function to act as placeholder for comment accumulation when the `skipComments` option is `false`.\n         * @returns {void}\n         * @private\n         */function noop(){}var nodes={};if(ALL_IRREGULARS.test(sourceCode.getText())){nodes.Program=function(node){/*\n                 * As we can easily fire warnings for all white space issues with\n                 * all the source its simpler to fire them here.\n                 * This means we can check all the application code without having\n                 * to worry about issues caused in the parser tokens.\n                 * When writing this code also evaluating per node was missing out\n                 * connecting tokens in some cases.\n                 * We can later filter the errors when they are found to be not an\n                 * issue in nodes we don't care about.\n                 */checkForIrregularWhitespace(node);checkForIrregularLineTerminators(node);};nodes.Identifier=removeInvalidNodeErrorsInIdentifierOrLiteral;nodes.Literal=removeInvalidNodeErrorsInIdentifierOrLiteral;nodes.TemplateElement=skipTemplates?removeInvalidNodeErrorsInTemplateLiteral:noop;nodes.LineComment=skipComments?rememberCommentNode:noop;nodes.BlockComment=skipComments?rememberCommentNode:noop;nodes[\"Program:exit\"]=function(){if(skipComments){// First strip errors occurring in comment nodes.  We have to do this post-`Program` to deal with top-of-file comments.\ncommentNodes.forEach(removeInvalidNodeErrorsInComment);}// If we have any errors remaining report on them\nerrors.forEach(function(error){context.report.apply(context,error);});};}else{nodes.Program=noop;}return nodes;}};},{\"../ast-utils\":605}],730:[function(require,module,exports){/**\n * @fileoverview Rule to flag usage of __iterator__ property\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of the `__iterator__` property\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{MemberExpression:function MemberExpression(node){if(node.property&&node.property.type===\"Identifier\"&&node.property.name===\"__iterator__\"&&!node.computed||node.property.type===\"Literal\"&&node.property.value===\"__iterator__\"){context.report({node:node,message:\"Reserved name '__iterator__'.\"});}}};}};},{}],731:[function(require,module,exports){/**\n * @fileoverview Rule to flag labels that are the same as an identifier\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow labels that share a name with a variable\",category:\"Variables\",recommended:false},schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Check if the identifier is present inside current scope\n         * @param {Object} scope current scope\n         * @param {string} name To evaluate\n         * @returns {boolean} True if its present\n         * @private\n         */function findIdentifier(scope,name){return astUtils.getVariableByName(scope,name)!==null;}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{LabeledStatement:function LabeledStatement(node){// Fetch the innermost scope.\nvar scope=context.getScope();// Recursively find the identifier walking up the scope, starting\n// with the innermost scope.\nif(findIdentifier(scope,node.label.name)){context.report({node:node,message:\"Found identifier with same name as label.\"});}}};}};},{\"../ast-utils\":605}],732:[function(require,module,exports){/**\n * @fileoverview Disallow Labeled Statements\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow labeled statements\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{allowLoop:{type:\"boolean\"},allowSwitch:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0];var allowLoop=Boolean(options&&options.allowLoop);var allowSwitch=Boolean(options&&options.allowSwitch);var scopeInfo=null;/**\n         * Gets the kind of a given node.\n         *\n         * @param {ASTNode} node - A node to get.\n         * @returns {string} The kind of the node.\n         */function getBodyKind(node){if(astUtils.isLoop(node)){return\"loop\";}if(node.type===\"SwitchStatement\"){return\"switch\";}return\"other\";}/**\n         * Checks whether the label of a given kind is allowed or not.\n         *\n         * @param {string} kind - A kind to check.\n         * @returns {boolean} `true` if the kind is allowed.\n         */function isAllowed(kind){switch(kind){case\"loop\":return allowLoop;case\"switch\":return allowSwitch;default:return false;}}/**\n         * Checks whether a given name is a label of a loop or not.\n         *\n         * @param {string} label - A name of a label to check.\n         * @returns {boolean} `true` if the name is a label of a loop.\n         */function getKind(label){var info=scopeInfo;while(info){if(info.label===label){return info.kind;}info=info.upper;}/* istanbul ignore next: syntax error */return\"other\";}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{LabeledStatement:function LabeledStatement(node){scopeInfo={label:node.label.name,kind:getBodyKind(node.body),upper:scopeInfo};},\"LabeledStatement:exit\":function LabeledStatementExit(node){if(!isAllowed(scopeInfo.kind)){context.report({node:node,message:\"Unexpected labeled statement.\"});}scopeInfo=scopeInfo.upper;},BreakStatement:function BreakStatement(node){if(node.label&&!isAllowed(getKind(node.label.name))){context.report({node:node,message:\"Unexpected label in break statement.\"});}},ContinueStatement:function ContinueStatement(node){if(node.label&&!isAllowed(getKind(node.label.name))){context.report({node:node,message:\"Unexpected label in continue statement.\"});}}};}};},{\"../ast-utils\":605}],733:[function(require,module,exports){/**\n * @fileoverview Rule to flag blocks with no reason to exist\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unnecessary nested blocks\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){// A stack of lone blocks to be checked for block-level bindings\nvar loneBlocks=[];var ruleDef=void 0;/**\n         * Reports a node as invalid.\n         * @param {ASTNode} node - The node to be reported.\n         * @returns {void}\n        */function report(node){var message=node.parent.type===\"BlockStatement\"?\"Nested block is redundant.\":\"Block is redundant.\";context.report({node:node,message:message});}/**\n         * Checks for any ocurrence of a BlockStatement in a place where lists of statements can appear\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} True if the node is a lone block.\n        */function isLoneBlock(node){return node.parent.type===\"BlockStatement\"||node.parent.type===\"Program\"||// Don't report blocks in switch cases if the block is the only statement of the case.\nnode.parent.type===\"SwitchCase\"&&!(node.parent.consequent[0]===node&&node.parent.consequent.length===1);}/**\n         * Checks the enclosing block of the current node for block-level bindings,\n         * and \"marks it\" as valid if any.\n         * @returns {void}\n        */function markLoneBlock(){if(loneBlocks.length===0){return;}var block=context.getAncestors().pop();if(loneBlocks[loneBlocks.length-1]===block){loneBlocks.pop();}}// Default rule definition: report all lone blocks\nruleDef={BlockStatement:function BlockStatement(node){if(isLoneBlock(node)){report(node);}}};// ES6: report blocks without block-level bindings\nif(context.parserOptions.ecmaVersion>=6){ruleDef={BlockStatement:function BlockStatement(node){if(isLoneBlock(node)){loneBlocks.push(node);}},\"BlockStatement:exit\":function BlockStatementExit(node){if(loneBlocks.length>0&&loneBlocks[loneBlocks.length-1]===node){loneBlocks.pop();report(node);}}};ruleDef.VariableDeclaration=function(node){if(node.kind===\"let\"||node.kind===\"const\"){markLoneBlock(node);}};ruleDef.FunctionDeclaration=function(node){if(context.getScope().isStrict){markLoneBlock(node);}};ruleDef.ClassDeclaration=markLoneBlock;}return ruleDef;}};},{}],734:[function(require,module,exports){/**\n * @fileoverview Rule to disallow if as the only statmenet in an else block\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `if` statements as the only statement in `else` blocks\",category:\"Stylistic Issues\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();return{IfStatement:function IfStatement(node){var ancestors=context.getAncestors(),parent=ancestors.pop(),grandparent=ancestors.pop();if(parent&&parent.type===\"BlockStatement\"&&parent.body.length===1&&grandparent&&grandparent.type===\"IfStatement\"&&parent===grandparent.alternate){context.report({node:node,message:\"Unexpected if as the only statement in an else block.\",fix:function fix(fixer){var openingElseCurly=sourceCode.getFirstToken(parent);var closingElseCurly=sourceCode.getLastToken(parent);var elseKeyword=sourceCode.getTokenBefore(openingElseCurly);var tokenAfterElseBlock=sourceCode.getTokenAfter(closingElseCurly);var lastIfToken=sourceCode.getLastToken(node.consequent);var sourceText=sourceCode.getText();if(sourceText.slice(openingElseCurly.range[1],node.range[0]).trim()||sourceText.slice(node.range[1],closingElseCurly.range[0]).trim()){// Don't fix if there are any non-whitespace characters interfering (e.g. comments)\nreturn null;}if(node.consequent.type!==\"BlockStatement\"&&lastIfToken.value!==\";\"&&tokenAfterElseBlock&&(node.consequent.loc.end.line===tokenAfterElseBlock.loc.start.line||/^[([/+`-]/.test(tokenAfterElseBlock.value)||lastIfToken.value===\"++\"||lastIfToken.value===\"--\")){/*\n                                 * If the `if` statement has no block, and is not followed by a semicolon, make sure that fixing\n                                 * the issue would not change semantics due to ASI. If this would happen, don't do a fix.\n                                 */return null;}return fixer.replaceTextRange([openingElseCurly.range[0],closingElseCurly.range[1]],(elseKeyword.range[1]===openingElseCurly.range[0]?\" \":\"\")+sourceCode.getText(node));}});}}};}};},{}],735:[function(require,module,exports){/**\n * @fileoverview Rule to flag creation of function inside a loop\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Gets the containing loop node of a specified node.\n *\n * We don't need to check nested functions, so this ignores those.\n * `Scope.through` contains references of nested functions.\n *\n * @param {ASTNode} node - An AST node to get.\n * @returns {ASTNode|null} The containing loop node of the specified node, or\n *      `null`.\n */function getContainingLoopNode(node){var parent=node.parent;while(parent){switch(parent.type){case\"WhileStatement\":case\"DoWhileStatement\":return parent;case\"ForStatement\":// `init` is outside of the loop.\nif(parent.init!==node){return parent;}break;case\"ForInStatement\":case\"ForOfStatement\":// `right` is outside of the loop.\nif(parent.right!==node){return parent;}break;case\"ArrowFunctionExpression\":case\"FunctionExpression\":case\"FunctionDeclaration\":// We don't need to check nested functions.\nreturn null;default:break;}node=parent;parent=node.parent;}return null;}/**\n * Gets the containing loop node of a given node.\n * If the loop was nested, this returns the most outer loop.\n *\n * @param {ASTNode} node - A node to get. This is a loop node.\n * @param {ASTNode|null} excludedNode - A node that the result node should not\n *      include.\n * @returns {ASTNode} The most outer loop node.\n */function getTopLoopNode(node,excludedNode){var retv=node;var border=excludedNode?excludedNode.range[1]:0;while(node&&node.range[0]>=border){retv=node;node=getContainingLoopNode(node);}return retv;}/**\n * Checks whether a given reference which refers to an upper scope's variable is\n * safe or not.\n *\n * @param {ASTNode} funcNode - A target function node.\n * @param {ASTNode} loopNode - A containing loop node.\n * @param {escope.Reference} reference - A reference to check.\n * @returns {boolean} `true` if the reference is safe or not.\n */function isSafe(funcNode,loopNode,reference){var variable=reference.resolved;var definition=variable&&variable.defs[0];var declaration=definition&&definition.parent;var kind=declaration&&declaration.type===\"VariableDeclaration\"?declaration.kind:\"\";// Variables which are declared by `const` is safe.\nif(kind===\"const\"){return true;}// Variables which are declared by `let` in the loop is safe.\n// It's a different instance from the next loop step's.\nif(kind===\"let\"&&declaration.range[0]>loopNode.range[0]&&declaration.range[1]<loopNode.range[1]){return true;}// WriteReferences which exist after this border are unsafe because those\n// can modify the variable.\nvar border=getTopLoopNode(loopNode,kind===\"let\"?declaration:null).range[0];/**\n     * Checks whether a given reference is safe or not.\n     * The reference is every reference of the upper scope's variable we are\n     * looking now.\n     *\n     * It's safeafe if the reference matches one of the following condition.\n     * - is readonly.\n     * - doesn't exist inside a local function and after the border.\n     *\n     * @param {escope.Reference} upperRef - A reference to check.\n     * @returns {boolean} `true` if the reference is safe.\n     */function isSafeReference(upperRef){var id=upperRef.identifier;return!upperRef.isWrite()||variable.scope.variableScope===upperRef.from.variableScope&&id.range[0]<border;}return Boolean(variable)&&variable.references.every(isSafeReference);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `function` declarations and expressions inside loop statements\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){/**\n         * Reports functions which match the following condition:\n         *\n         * - has a loop node in ancestors.\n         * - has any references which refers to an unsafe variable.\n         *\n         * @param {ASTNode} node The AST node to check.\n         * @returns {boolean} Whether or not the node is within a loop.\n         */function checkForLoops(node){var loopNode=getContainingLoopNode(node);if(!loopNode){return;}var references=context.getScope().through;if(references.length>0&&!references.every(isSafe.bind(null,node,loopNode))){context.report({node:node,message:\"Don't make functions within a loop.\"});}}return{ArrowFunctionExpression:checkForLoops,FunctionExpression:checkForLoops,FunctionDeclaration:checkForLoops};}};},{}],736:[function(require,module,exports){/**\n * @fileoverview Rule to flag statements that use magic numbers (adapted from https://github.com/danielstjules/buddy.js)\n * @author Vincent Lemeunier\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow magic numbers\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{detectObjects:{type:\"boolean\"},enforceConst:{type:\"boolean\"},ignore:{type:\"array\",items:{type:\"number\"},uniqueItems:true},ignoreArrayIndexes:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var config=context.options[0]||{},detectObjects=!!config.detectObjects,enforceConst=!!config.enforceConst,ignore=config.ignore||[],ignoreArrayIndexes=!!config.ignoreArrayIndexes;/**\n         * Returns whether the node is number literal\n         * @param {Node} node - the node literal being evaluated\n         * @returns {boolean} true if the node is a number literal\n         */function isNumber(node){return typeof node.value===\"number\";}/**\n         * Returns whether the number should be ignored\n         * @param {number} num - the number\n         * @returns {boolean} true if the number should be ignored\n         */function shouldIgnoreNumber(num){return ignore.indexOf(num)!==-1;}/**\n         * Returns whether the number should be ignored when used as a radix within parseInt() or Number.parseInt()\n         * @param {ASTNode} parent - the non-\"UnaryExpression\" parent\n         * @param {ASTNode} node - the node literal being evaluated\n         * @returns {boolean} true if the number should be ignored\n         */function shouldIgnoreParseInt(parent,node){return parent.type===\"CallExpression\"&&node===parent.arguments[1]&&(parent.callee.name===\"parseInt\"||parent.callee.type===\"MemberExpression\"&&parent.callee.object.name===\"Number\"&&parent.callee.property.name===\"parseInt\");}/**\n         * Returns whether the number should be ignored when used to define a JSX prop\n         * @param {ASTNode} parent - the non-\"UnaryExpression\" parent\n         * @returns {boolean} true if the number should be ignored\n         */function shouldIgnoreJSXNumbers(parent){return parent.type.indexOf(\"JSX\")===0;}/**\n         * Returns whether the number should be ignored when used as an array index with enabled 'ignoreArrayIndexes' option.\n         * @param {ASTNode} parent - the non-\"UnaryExpression\" parent.\n         * @returns {boolean} true if the number should be ignored\n         */function shouldIgnoreArrayIndexes(parent){return parent.type===\"MemberExpression\"&&ignoreArrayIndexes;}return{Literal:function Literal(node){var parent=node.parent,value=node.value,raw=node.raw;var okTypes=detectObjects?[]:[\"ObjectExpression\",\"Property\",\"AssignmentExpression\"];if(!isNumber(node)){return;}// For negative magic numbers: update the value and parent node\nif(parent.type===\"UnaryExpression\"&&parent.operator===\"-\"){node=parent;parent=node.parent;value=-value;raw=\"-\"+raw;}if(shouldIgnoreNumber(value)||shouldIgnoreParseInt(parent,node)||shouldIgnoreArrayIndexes(parent)||shouldIgnoreJSXNumbers(parent)){return;}if(parent.type===\"VariableDeclarator\"){if(enforceConst&&parent.parent.kind!==\"const\"){context.report({node:node,message:\"Number constants declarations must use 'const'.\"});}}else if(okTypes.indexOf(parent.type)===-1||parent.type===\"AssignmentExpression\"&&parent.left.type===\"Identifier\"){context.report({node:node,message:\"No magic number: {{raw}}.\",data:{raw:raw}});}}};}};},{}],737:[function(require,module,exports){/**\n * @fileoverview Rule to disallow mixed binary operators.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils.js\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar ARITHMETIC_OPERATORS=[\"+\",\"-\",\"*\",\"/\",\"%\",\"**\"];var BITWISE_OPERATORS=[\"&\",\"|\",\"^\",\"~\",\"<<\",\">>\",\">>>\"];var COMPARISON_OPERATORS=[\"==\",\"!=\",\"===\",\"!==\",\">\",\">=\",\"<\",\"<=\"];var LOGICAL_OPERATORS=[\"&&\",\"||\"];var RELATIONAL_OPERATORS=[\"in\",\"instanceof\"];var ALL_OPERATORS=[].concat(ARITHMETIC_OPERATORS,BITWISE_OPERATORS,COMPARISON_OPERATORS,LOGICAL_OPERATORS,RELATIONAL_OPERATORS);var DEFAULT_GROUPS=[ARITHMETIC_OPERATORS,BITWISE_OPERATORS,COMPARISON_OPERATORS,LOGICAL_OPERATORS,RELATIONAL_OPERATORS];var TARGET_NODE_TYPE=/^(?:Binary|Logical)Expression$/;/**\n * Normalizes options.\n *\n * @param {Object|undefined} options - A options object to normalize.\n * @returns {Object} Normalized option object.\n */function normalizeOptions(options){var hasGroups=options&&options.groups&&options.groups.length>0;var groups=hasGroups?options.groups:DEFAULT_GROUPS;var allowSamePrecedence=(options&&options.allowSamePrecedence)!==false;return{groups:groups,allowSamePrecedence:allowSamePrecedence};}/**\n * Checks whether any group which includes both given operator exists or not.\n *\n * @param {Array.<string[]>} groups - A list of groups to check.\n * @param {string} left - An operator.\n * @param {string} right - Another operator.\n * @returns {boolean} `true` if such group existed.\n */function includesBothInAGroup(groups,left,right){return groups.some(function(group){return group.indexOf(left)!==-1&&group.indexOf(right)!==-1;});}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow mixed binary operators\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{groups:{type:\"array\",items:{type:\"array\",items:{enum:ALL_OPERATORS},minItems:2,uniqueItems:true},uniqueItems:true},allowSamePrecedence:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();var options=normalizeOptions(context.options[0]);/**\n         * Checks whether a given node should be ignored by options or not.\n         *\n         * @param {ASTNode} node - A node to check. This is a BinaryExpression\n         *      node or a LogicalExpression node. This parent node is one of\n         *      them, too.\n         * @returns {boolean} `true` if the node should be ignored.\n         */function shouldIgnore(node){var a=node;var b=node.parent;return!includesBothInAGroup(options.groups,a.operator,b.operator)||options.allowSamePrecedence&&astUtils.getPrecedence(a)===astUtils.getPrecedence(b);}/**\n         * Checks whether the operator of a given node is mixed with parent\n         * node's operator or not.\n         *\n         * @param {ASTNode} node - A node to check. This is a BinaryExpression\n         *      node or a LogicalExpression node. This parent node is one of\n         *      them, too.\n         * @returns {boolean} `true` if the node was mixed.\n         */function isMixedWithParent(node){return node.operator!==node.parent.operator&&!astUtils.isParenthesised(sourceCode,node);}/**\n         * Gets the operator token of a given node.\n         *\n         * @param {ASTNode} node - A node to check. This is a BinaryExpression\n         *      node or a LogicalExpression node.\n         * @returns {Token} The operator token of the node.\n         */function getOperatorToken(node){return sourceCode.getTokenAfter(node.left,astUtils.isNotClosingParenToken);}/**\n         * Reports both the operator of a given node and the operator of the\n         * parent node.\n         *\n         * @param {ASTNode} node - A node to check. This is a BinaryExpression\n         *      node or a LogicalExpression node. This parent node is one of\n         *      them, too.\n         * @returns {void}\n         */function reportBothOperators(node){var parent=node.parent;var left=parent.left===node?node:parent;var right=parent.left!==node?node:parent;var message=\"Unexpected mix of '{{leftOperator}}' and '{{rightOperator}}'.\";var data={leftOperator:left.operator,rightOperator:right.operator};context.report({node:left,loc:getOperatorToken(left).loc.start,message:message,data:data});context.report({node:right,loc:getOperatorToken(right).loc.start,message:message,data:data});}/**\n         * Checks between the operator of this node and the operator of the\n         * parent node.\n         *\n         * @param {ASTNode} node - A node to check.\n         * @returns {void}\n         */function check(node){if(TARGET_NODE_TYPE.test(node.parent.type)&&isMixedWithParent(node)&&!shouldIgnore(node)){reportBothOperators(node);}}return{BinaryExpression:check,LogicalExpression:check};}};},{\"../ast-utils.js\":605}],738:[function(require,module,exports){/**\n * @fileoverview Rule to enforce grouped require statements for Node.JS\n * @author Raphael Pigulla\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};module.exports={meta:{docs:{description:\"disallow `require` calls to be mixed with regular variable declarations\",category:\"Node.js and CommonJS\",recommended:false},schema:[{oneOf:[{type:\"boolean\"},{type:\"object\",properties:{grouping:{type:\"boolean\"},allowCall:{type:\"boolean\"}},additionalProperties:false}]}]},create:function create(context){var options=context.options[0];var grouping=false,allowCall=false;if((typeof options===\"undefined\"?\"undefined\":_typeof(options))===\"object\"){grouping=options.grouping;allowCall=options.allowCall;}else{grouping=!!options;}/**\n         * Returns the list of built-in modules.\n         *\n         * @returns {string[]} An array of built-in Node.js modules.\n         */function getBuiltinModules(){/*\n             * This list is generated using:\n             * `require(\"repl\")._builtinLibs.concat('repl').sort()`\n             * This particular list is as per nodejs v0.12.2 and iojs v0.7.1\n             */return[\"assert\",\"buffer\",\"child_process\",\"cluster\",\"crypto\",\"dgram\",\"dns\",\"domain\",\"events\",\"fs\",\"http\",\"https\",\"net\",\"os\",\"path\",\"punycode\",\"querystring\",\"readline\",\"repl\",\"smalloc\",\"stream\",\"string_decoder\",\"tls\",\"tty\",\"url\",\"util\",\"v8\",\"vm\",\"zlib\"];}var BUILTIN_MODULES=getBuiltinModules();var DECL_REQUIRE=\"require\",DECL_UNINITIALIZED=\"uninitialized\",DECL_OTHER=\"other\";var REQ_CORE=\"core\",REQ_FILE=\"file\",REQ_MODULE=\"module\",REQ_COMPUTED=\"computed\";/**\n         * Determines the type of a declaration statement.\n         * @param {ASTNode} initExpression The init node of the VariableDeclarator.\n         * @returns {string} The type of declaration represented by the expression.\n         */function getDeclarationType(initExpression){if(!initExpression){// \"var x;\"\nreturn DECL_UNINITIALIZED;}if(initExpression.type===\"CallExpression\"&&initExpression.callee.type===\"Identifier\"&&initExpression.callee.name===\"require\"){// \"var x = require('util');\"\nreturn DECL_REQUIRE;}else if(allowCall&&initExpression.type===\"CallExpression\"&&initExpression.callee.type===\"CallExpression\"){// \"var x = require('diagnose')('sub-module');\"\nreturn getDeclarationType(initExpression.callee);}else if(initExpression.type===\"MemberExpression\"){// \"var x = require('glob').Glob;\"\nreturn getDeclarationType(initExpression.object);}// \"var x = 42;\"\nreturn DECL_OTHER;}/**\n         * Determines the type of module that is loaded via require.\n         * @param {ASTNode} initExpression The init node of the VariableDeclarator.\n         * @returns {string} The module type.\n         */function inferModuleType(initExpression){if(initExpression.type===\"MemberExpression\"){// \"var x = require('glob').Glob;\"\nreturn inferModuleType(initExpression.object);}else if(initExpression.arguments.length===0){// \"var x = require();\"\nreturn REQ_COMPUTED;}var arg=initExpression.arguments[0];if(arg.type!==\"Literal\"||typeof arg.value!==\"string\"){// \"var x = require(42);\"\nreturn REQ_COMPUTED;}if(BUILTIN_MODULES.indexOf(arg.value)!==-1){// \"var fs = require('fs');\"\nreturn REQ_CORE;}else if(/^\\.{0,2}\\//.test(arg.value)){// \"var utils = require('./utils');\"\nreturn REQ_FILE;}// \"var async = require('async');\"\nreturn REQ_MODULE;}/**\n         * Check if the list of variable declarations is mixed, i.e. whether it\n         * contains both require and other declarations.\n         * @param {ASTNode} declarations The list of VariableDeclarators.\n         * @returns {boolean} True if the declarations are mixed, false if not.\n         */function isMixed(declarations){var contains={};declarations.forEach(function(declaration){var type=getDeclarationType(declaration.init);contains[type]=true;});return!!(contains[DECL_REQUIRE]&&(contains[DECL_UNINITIALIZED]||contains[DECL_OTHER]));}/**\n         * Check if all require declarations in the given list are of the same\n         * type.\n         * @param {ASTNode} declarations The list of VariableDeclarators.\n         * @returns {boolean} True if the declarations are grouped, false if not.\n         */function isGrouped(declarations){var found={};declarations.forEach(function(declaration){if(getDeclarationType(declaration.init)===DECL_REQUIRE){found[inferModuleType(declaration.init)]=true;}});return(0,_keys4.default)(found).length<=1;}return{VariableDeclaration:function VariableDeclaration(node){if(isMixed(node.declarations)){context.report({node:node,message:\"Do not mix 'require' and other declarations.\"});}else if(grouping&&!isGrouped(node.declarations)){context.report({node:node,message:\"Do not mix core, module, file and computed requires.\"});}}};}};},{}],739:[function(require,module,exports){/**\n * @fileoverview Disallow mixed spaces and tabs for indentation\n * @author Jary Niebur\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow mixed spaces and tabs for indentation\",category:\"Stylistic Issues\",recommended:true},schema:[{enum:[\"smart-tabs\",true,false]}]},create:function create(context){var sourceCode=context.getSourceCode();var smartTabs=void 0;var ignoredLocs=[];switch(context.options[0]){case true:// Support old syntax, maybe add deprecation warning here\ncase\"smart-tabs\":smartTabs=true;break;default:smartTabs=false;}/**\n         * Determines if a given line and column are before a location.\n         * @param {Location} loc The location object from an AST node.\n         * @param {int} line The line to check.\n         * @param {int} column The column to check.\n         * @returns {boolean} True if the line and column are before the location, false if not.\n         * @private\n         */function beforeLoc(loc,line,column){if(line<loc.start.line){return true;}return line===loc.start.line&&column<loc.start.column;}/**\n         * Determines if a given line and column are after a location.\n         * @param {Location} loc The location object from an AST node.\n         * @param {int} line The line to check.\n         * @param {int} column The column to check.\n         * @returns {boolean} True if the line and column are after the location, false if not.\n         * @private\n         */function afterLoc(loc,line,column){if(line>loc.end.line){return true;}return line===loc.end.line&&column>loc.end.column;}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{TemplateElement:function TemplateElement(node){ignoredLocs.push(node.loc);},\"Program:exit\":function ProgramExit(node){/*\n                 * At least one space followed by a tab\n                 * or the reverse before non-tab/-space\n                 * characters begin.\n                 */var regex=/^(?=[\\t ]*(\\t | \\t))/;var lines=sourceCode.lines,comments=sourceCode.getAllComments();comments.forEach(function(comment){ignoredLocs.push(comment.loc);});ignoredLocs.sort(function(first,second){if(beforeLoc(first,second.start.line,second.start.column)){return 1;}if(beforeLoc(second,first.start.line,second.start.column)){return-1;}return 0;});if(smartTabs){/*\n                     * At least one space followed by a tab\n                     * before non-tab/-space characters begin.\n                     */regex=/^(?=[\\t ]* \\t)/;}lines.forEach(function(line,i){var match=regex.exec(line);if(match){var lineNumber=i+1,column=match.index+1;for(var j=0;j<ignoredLocs.length;j++){if(beforeLoc(ignoredLocs[j],lineNumber,column)){continue;}if(afterLoc(ignoredLocs[j],lineNumber,column)){continue;}return;}context.report({node:node,loc:{line:lineNumber,column:column},message:\"Mixed spaces and tabs.\"});}});}};}};},{}],740:[function(require,module,exports){/**\n * @fileoverview Rule to check use of chained assignment expressions\n * @author Stewart Rand\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow use of chained assignment expressions\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{AssignmentExpression:function AssignmentExpression(node){if([\"AssignmentExpression\",\"VariableDeclarator\"].indexOf(node.parent.type)!==-1){context.report({node:node,message:\"Unexpected chained assignment.\"});}}};}};},{}],741:[function(require,module,exports){/**\n * @fileoverview Disallow use of multiple spaces.\n * @author Nicholas C. Zakas\n */\"use strict\";var _templateObject=_taggedTemplateLiteral([\"[^ \\t\",\"].? {2,}\"],[\"[^ \\\\t\",\"].? {2,}\"]);function _taggedTemplateLiteral(strings,raw){return(0,_freeze2.default)((0,_defineProperties2.default)(strings,{raw:{value:(0,_freeze2.default)(raw)}}));}var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow multiple spaces\",category:\"Best Practices\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{exceptions:{type:\"object\",patternProperties:{\"^([A-Z][a-z]*)+$\":{type:\"boolean\"}},additionalProperties:false}},additionalProperties:false}]},create:function create(context){// the index of the last comment that was checked\nvar exceptions={Property:true},options=context.options[0];var hasExceptions=true,lastCommentIndex=0;if(options&&options.exceptions){(0,_keys4.default)(options.exceptions).forEach(function(key){if(options.exceptions[key]){exceptions[key]=true;}else{delete exceptions[key];}});hasExceptions=(0,_keys4.default)(exceptions).length>0;}/**\n         * Determines if a given source index is in a comment or not by checking\n         * the index against the comment range. Since the check goes straight\n         * through the file, once an index is passed a certain comment, we can\n         * go to the next comment to check that.\n         * @param {int} index The source index to check.\n         * @param {ASTNode[]} comments An array of comment nodes.\n         * @returns {boolean} True if the index is within a comment, false if not.\n         * @private\n         */function isIndexInComment(index,comments){while(lastCommentIndex<comments.length){var comment=comments[lastCommentIndex];if(comment.range[0]<=index&&index<comment.range[1]){return true;}else if(index>comment.range[1]){lastCommentIndex++;}else{break;}}return false;}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Program:function Program(){var sourceCode=context.getSourceCode(),source=sourceCode.getText(),allComments=sourceCode.getAllComments(),JOINED_LINEBEAKS=(0,_from2.default)(astUtils.LINEBREAKS).join(\"\"),pattern=new RegExp((0,_raw2.default)(_templateObject,JOINED_LINEBEAKS),\"g\");// note: repeating space\nvar parent=void 0;/**\n                 * Creates a fix function that removes the multiple spaces between the two tokens\n                 * @param {RuleFixer} leftToken left token\n                 * @param {RuleFixer} rightToken right token\n                 * @returns {Function} fix function\n                 * @private\n                 */function createFix(leftToken,rightToken){return function(fixer){return fixer.replaceTextRange([leftToken.range[1],rightToken.range[0]],\" \");};}while(pattern.test(source)){// do not flag anything inside of comments\nif(!isIndexInComment(pattern.lastIndex,allComments)){var token=sourceCode.getTokenByRangeStart(pattern.lastIndex);if(token){var previousToken=sourceCode.getTokenBefore(token);if(hasExceptions){parent=sourceCode.getNodeByRangeIndex(pattern.lastIndex-1);}if(!parent||!exceptions[parent.type]){context.report({node:token,loc:token.loc.start,message:\"Multiple spaces found before '{{value}}'.\",data:{value:token.value},fix:createFix(previousToken,token)});}}}}}};}};},{\"../ast-utils\":605}],742:[function(require,module,exports){/**\n * @fileoverview Rule to flag when using multiline strings\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow multiline strings\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){/**\n         * Determines if a given node is part of JSX syntax.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node is a JSX node, false if not.\n         * @private\n         */function isJSXElement(node){return node.type.indexOf(\"JSX\")===0;}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{Literal:function Literal(node){if(astUtils.LINEBREAK_MATCHER.test(node.raw)&&!isJSXElement(node.parent)){context.report({node:node,message:\"Multiline support is limited to browsers supporting ES5 only.\"});}}};}};},{\"../ast-utils\":605}],743:[function(require,module,exports){/**\n * @fileoverview Disallows multiple blank lines.\n * implementation adapted from the no-trailing-spaces rule.\n * @author Greg Cochard\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow multiple empty lines\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{max:{type:\"integer\",minimum:0},maxEOF:{type:\"integer\",minimum:0},maxBOF:{type:\"integer\",minimum:0}},required:[\"max\"],additionalProperties:false}]},create:function create(context){// Use options.max or 2 as default\nvar max=2,maxEOF=max,maxBOF=max;if(context.options.length){max=context.options[0].max;maxEOF=typeof context.options[0].maxEOF!==\"undefined\"?context.options[0].maxEOF:max;maxBOF=typeof context.options[0].maxBOF!==\"undefined\"?context.options[0].maxBOF:max;}var sourceCode=context.getSourceCode();// Swallow the final newline, as some editors add it automatically and we don't want it to cause an issue\nvar allLines=sourceCode.lines[sourceCode.lines.length-1]===\"\"?sourceCode.lines.slice(0,-1):sourceCode.lines;var templateLiteralLines=new _set3.default();//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{TemplateLiteral:function TemplateLiteral(node){node.quasis.forEach(function(literalPart){// Empty lines have a semantic meaning if they're inside template literals. Don't count these as empty lines.\nfor(var ignoredLine=literalPart.loc.start.line;ignoredLine<literalPart.loc.end.line;ignoredLine++){templateLiteralLines.add(ignoredLine);}});},\"Program:exit\":function ProgramExit(node){return allLines// Given a list of lines, first get a list of line numbers that are non-empty.\n.reduce(function(nonEmptyLineNumbers,line,index){if(line.trim()||templateLiteralLines.has(index+1)){nonEmptyLineNumbers.push(index+1);}return nonEmptyLineNumbers;},[])// Add a value at the end to allow trailing empty lines to be checked.\n.concat(allLines.length+1)// Given two line numbers of non-empty lines, report the lines between if the difference is too large.\n.reduce(function(lastLineNumber,lineNumber){var message=void 0,maxAllowed=void 0;if(lastLineNumber===0){message=\"Too many blank lines at the beginning of file. Max of {{max}} allowed.\";maxAllowed=maxBOF;}else if(lineNumber===allLines.length+1){message=\"Too many blank lines at the end of file. Max of {{max}} allowed.\";maxAllowed=maxEOF;}else{message=\"More than {{max}} blank {{pluralizedLines}} not allowed.\";maxAllowed=max;}if(lineNumber-lastLineNumber-1>maxAllowed){context.report({node:node,loc:{start:{line:lastLineNumber+1,column:0},end:{line:lineNumber,column:0}},message:message,data:{max:maxAllowed,pluralizedLines:maxAllowed===1?\"line\":\"lines\"},fix:function fix(fixer){return fixer.removeRange([sourceCode.getIndexFromLoc({line:lastLineNumber+1,column:0}),sourceCode.getIndexFromLoc({line:lineNumber-maxAllowed,column:0})]);}});}return lineNumber;},0);}};}};},{}],744:[function(require,module,exports){/**\n * @fileoverview Rule to disallow assignments to native objects or read-only global variables\n * @author Ilya Volodin\n * @deprecated in ESLint v3.3.0\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow assignments to native objects or read-only global variables\",category:\"Best Practices\",recommended:false,replacedBy:[\"no-global-assign\"]},deprecated:true,schema:[{type:\"object\",properties:{exceptions:{type:\"array\",items:{type:\"string\"},uniqueItems:true}},additionalProperties:false}]},create:function create(context){var config=context.options[0];var exceptions=config&&config.exceptions||[];/**\n         * Reports write references.\n         * @param {Reference} reference - A reference to check.\n         * @param {int} index - The index of the reference in the references.\n         * @param {Reference[]} references - The array that the reference belongs to.\n         * @returns {void}\n         */function checkReference(reference,index,references){var identifier=reference.identifier;if(reference.init===false&&reference.isWrite()&&(// Destructuring assignments can have multiple default value,\n// so possibly there are multiple writeable references for the same identifier.\nindex===0||references[index-1].identifier!==identifier)){context.report({node:identifier,message:\"Read-only global '{{name}}' should not be modified.\",data:identifier});}}/**\n         * Reports write references if a given variable is read-only builtin.\n         * @param {Variable} variable - A variable to check.\n         * @returns {void}\n         */function checkVariable(variable){if(variable.writeable===false&&exceptions.indexOf(variable.name)===-1){variable.references.forEach(checkReference);}}return{Program:function Program(){var globalScope=context.getScope();globalScope.variables.forEach(checkVariable);}};}};},{}],745:[function(require,module,exports){/**\n * @fileoverview Rule to disallow a negated condition\n * @author Alberto Rodríguez\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow negated conditions\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){/**\n         * Determines if a given node is an if-else without a condition on the else\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node has an else without an if.\n         * @private\n         */function hasElseWithoutCondition(node){return node.alternate&&node.alternate.type!==\"IfStatement\";}/**\n         * Determines if a given node is a negated unary expression\n         * @param {Object} test The test object to check.\n         * @returns {boolean} True if the node is a negated unary expression.\n         * @private\n         */function isNegatedUnaryExpression(test){return test.type===\"UnaryExpression\"&&test.operator===\"!\";}/**\n         * Determines if a given node is a negated binary expression\n         * @param {Test} test The test to check.\n         * @returns {boolean} True if the node is a negated binary expression.\n         * @private\n         */function isNegatedBinaryExpression(test){return test.type===\"BinaryExpression\"&&(test.operator===\"!=\"||test.operator===\"!==\");}/**\n         * Determines if a given node has a negated if expression\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node has a negated if expression.\n         * @private\n         */function isNegatedIf(node){return isNegatedUnaryExpression(node.test)||isNegatedBinaryExpression(node.test);}return{IfStatement:function IfStatement(node){if(!hasElseWithoutCondition(node)){return;}if(isNegatedIf(node)){context.report({node:node,message:\"Unexpected negated condition.\"});}},ConditionalExpression:function ConditionalExpression(node){if(isNegatedIf(node)){context.report({node:node,message:\"Unexpected negated condition.\"});}}};}};},{}],746:[function(require,module,exports){/**\n * @fileoverview A rule to disallow negated left operands of the `in` operator\n * @author Michael Ficarra\n * @deprecated in ESLint v3.3.0\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow negating the left operand in `in` expressions\",category:\"Possible Errors\",recommended:false,replacedBy:[\"no-unsafe-negation\"]},deprecated:true,schema:[]},create:function create(context){return{BinaryExpression:function BinaryExpression(node){if(node.operator===\"in\"&&node.left.type===\"UnaryExpression\"&&node.left.operator===\"!\"){context.report({node:node,message:\"The 'in' expression's left operand is negated.\"});}}};}};},{}],747:[function(require,module,exports){/**\n * @fileoverview Rule to flag nested ternary expressions\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow nested ternary expressions\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){return{ConditionalExpression:function ConditionalExpression(node){if(node.alternate.type===\"ConditionalExpression\"||node.consequent.type===\"ConditionalExpression\"){context.report({node:node,message:\"Do not nest ternary expressions.\"});}}};}};},{}],748:[function(require,module,exports){/**\n * @fileoverview Rule to flag when using new Function\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `new` operators with the `Function` object\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Reports a node.\n         * @param {ASTNode} node The node to report\n         * @returns {void}\n         * @private\n         */function report(node){context.report({node:node,message:\"The Function constructor is eval.\"});}return{\"NewExpression[callee.name = 'Function']\":report,\"CallExpression[callee.name = 'Function']\":report};}};},{}],749:[function(require,module,exports){/**\n * @fileoverview A rule to disallow calls to the Object constructor\n * @author Matt DuVall <http://www.mattduvall.com/>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `Object` constructors\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){return{NewExpression:function NewExpression(node){if(node.callee.name===\"Object\"){context.report({node:node,message:\"The object literal notation {} is preferrable.\"});}}};}};},{}],750:[function(require,module,exports){/**\n * @fileoverview Rule to disallow use of new operator with the `require` function\n * @author Wil Moore III\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `new` operators with calls to `require`\",category:\"Node.js and CommonJS\",recommended:false},schema:[]},create:function create(context){return{NewExpression:function NewExpression(node){if(node.callee.type===\"Identifier\"&&node.callee.name===\"require\"){context.report({node:node,message:\"Unexpected use of new with require.\"});}}};}};},{}],751:[function(require,module,exports){/**\n * @fileoverview Rule to disallow use of the new operator with the `Symbol` object\n * @author Alberto Rodríguez\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `new` operators with the `Symbol` object\",category:\"ECMAScript 6\",recommended:true},schema:[]},create:function create(context){return{\"Program:exit\":function ProgramExit(){var globalScope=context.getScope();var variable=globalScope.set.get(\"Symbol\");if(variable&&variable.defs.length===0){variable.references.forEach(function(ref){var node=ref.identifier;if(node.parent&&node.parent.type===\"NewExpression\"){context.report({node:node,message:\"`Symbol` cannot be called as a constructor.\"});}});}}};}};},{}],752:[function(require,module,exports){/**\n * @fileoverview Rule to flag when using constructor for wrapper objects\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `new` operators with the `String`, `Number`, and `Boolean` objects\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{NewExpression:function NewExpression(node){var wrapperObjects=[\"String\",\"Number\",\"Boolean\",\"Math\",\"JSON\"];if(wrapperObjects.indexOf(node.callee.name)>-1){context.report({node:node,message:\"Do not use {{fn}} as a constructor.\",data:{fn:node.callee.name}});}}};}};},{}],753:[function(require,module,exports){/**\n * @fileoverview Rule to flag statements with function invocation preceded by\n * \"new\" and not part of assignment\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `new` operators outside of assignments or comparisons\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{\"ExpressionStatement > NewExpression\":function ExpressionStatementNewExpression(node){context.report({node:node.parent,message:\"Do not use 'new' for side effects.\"});}};}};},{}],754:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of an object property of the global object (Math and JSON) as a function\n * @author James Allardice\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow calling global object properties as functions\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){return{CallExpression:function CallExpression(node){if(node.callee.type===\"Identifier\"){var name=node.callee.name;if(name===\"Math\"||name===\"JSON\"||name===\"Reflect\"){context.report({node:node,message:\"'{{name}}' is not a function.\",data:{name:name}});}}}};}};},{}],755:[function(require,module,exports){/**\n * @fileoverview Rule to flag octal escape sequences in string literals.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow octal escape sequences in string literals\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{Literal:function Literal(node){if(typeof node.value!==\"string\"){return;}var match=node.raw.match(/^([^\\\\]|\\\\[^0-7])*\\\\([0-3][0-7]{1,2}|[4-7][0-7]|[0-7])/);if(match){var octalDigit=match[2];// \\0 is actually not considered an octal\nif(match[2]!==\"0\"||typeof match[3]!==\"undefined\"){context.report({node:node,message:\"Don't use octal: '\\\\{{octalDigit}}'. Use '\\\\u....' instead.\",data:{octalDigit:octalDigit}});}}}};}};},{}],756:[function(require,module,exports){/**\n * @fileoverview Rule to flag when initializing octal literal\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow octal literals\",category:\"Best Practices\",recommended:true},schema:[]},create:function create(context){return{Literal:function Literal(node){if(typeof node.value===\"number\"&&/^0[0-7]/.test(node.raw)){context.report({node:node,message:\"Octal literals should not be used.\"});}}};}};},{}],757:[function(require,module,exports){/**\n * @fileoverview Disallow reassignment of function parameters.\n * @author Nat Burns\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar stopNodePattern=/(?:Statement|Declaration|Function(?:Expression)?|Program)$/;module.exports={meta:{docs:{description:\"disallow reassigning `function` parameters\",category:\"Best Practices\",recommended:false},schema:[{oneOf:[{type:\"object\",properties:{props:{enum:[false]}},additionalProperties:false},{type:\"object\",properties:{props:{enum:[true]},ignorePropertyModificationsFor:{type:\"array\",items:{type:\"string\"},uniqueItems:true}},additionalProperties:false}]}]},create:function create(context){var props=context.options[0]&&Boolean(context.options[0].props);var ignoredPropertyAssignmentsFor=context.options[0]&&context.options[0].ignorePropertyModificationsFor||[];/**\n         * Checks whether or not the reference modifies properties of its variable.\n         * @param {Reference} reference - A reference to check.\n         * @returns {boolean} Whether or not the reference modifies properties of its variable.\n         */function isModifyingProp(reference){var node=reference.identifier;var parent=node.parent;while(parent&&!stopNodePattern.test(parent.type)){switch(parent.type){// e.g. foo.a = 0;\ncase\"AssignmentExpression\":return parent.left===node;// e.g. ++foo.a;\ncase\"UpdateExpression\":return true;// e.g. delete foo.a;\ncase\"UnaryExpression\":if(parent.operator===\"delete\"){return true;}break;// EXCLUDES: e.g. cache.get(foo.a).b = 0;\ncase\"CallExpression\":if(parent.callee!==node){return false;}break;// EXCLUDES: e.g. cache[foo.a] = 0;\ncase\"MemberExpression\":if(parent.property===node){return false;}break;// EXCLUDES: e.g. ({ [foo]: a }) = bar;\ncase\"Property\":if(parent.key===node){return false;}break;// no default\n}node=parent;parent=node.parent;}return false;}/**\n         * Reports a reference if is non initializer and writable.\n         * @param {Reference} reference - A reference to check.\n         * @param {int} index - The index of the reference in the references.\n         * @param {Reference[]} references - The array that the reference belongs to.\n         * @returns {void}\n         */function checkReference(reference,index,references){var identifier=reference.identifier;if(identifier&&!reference.init&&(// Destructuring assignments can have multiple default value,\n// so possibly there are multiple writeable references for the same identifier.\nindex===0||references[index-1].identifier!==identifier)){if(reference.isWrite()){context.report({node:identifier,message:\"Assignment to function parameter '{{name}}'.\",data:{name:identifier.name}});}else if(props&&isModifyingProp(reference)&&ignoredPropertyAssignmentsFor.indexOf(identifier.name)===-1){context.report({node:identifier,message:\"Assignment to property of function parameter '{{name}}'.\",data:{name:identifier.name}});}}}/**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable - A variable to check.\n         * @returns {void}\n         */function checkVariable(variable){if(variable.defs[0].type===\"Parameter\"){variable.references.forEach(checkReference);}}/**\n         * Checks parameters of a given function node.\n         * @param {ASTNode} node - A function node to check.\n         * @returns {void}\n         */function checkForFunction(node){context.getDeclaredVariables(node).forEach(checkVariable);}return{// `:exit` is needed for the `node.parent` property of identifier nodes.\n\"FunctionDeclaration:exit\":checkForFunction,\"FunctionExpression:exit\":checkForFunction,\"ArrowFunctionExpression:exit\":checkForFunction};}};},{}],758:[function(require,module,exports){/**\n * @fileoverview Disallow string concatenation when using __dirname and __filename\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow string concatenation with `__dirname` and `__filename`\",category:\"Node.js and CommonJS\",recommended:false},schema:[]},create:function create(context){var MATCHER=/^__(?:dir|file)name$/;//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{BinaryExpression:function BinaryExpression(node){var left=node.left,right=node.right;if(node.operator===\"+\"&&(left.type===\"Identifier\"&&MATCHER.test(left.name)||right.type===\"Identifier\"&&MATCHER.test(right.name))){context.report({node:node,message:\"Use path.join() or path.resolve() instead of + to create paths.\"});}}};}};},{}],759:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of unary increment and decrement operators.\n * @author Ian Christian Myers\n * @author Brody McKee (github.com/mrmckeb)\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};module.exports={meta:{docs:{description:\"disallow the unary operators `++` and `--`\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{allowForLoopAfterthoughts:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var config=context.options[0];var allowInForAfterthought=false;if((typeof config===\"undefined\"?\"undefined\":_typeof(config))===\"object\"){allowInForAfterthought=config.allowForLoopAfterthoughts===true;}return{UpdateExpression:function UpdateExpression(node){if(allowInForAfterthought&&node.parent.type===\"ForStatement\"){return;}context.report({node:node,message:\"Unary operator '{{operator}}' used.\",data:{operator:node.operator}});}};}};},{}],760:[function(require,module,exports){/**\n * @fileoverview Disallow the use of process.env()\n * @author Vignesh Anand\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `process.env`\",category:\"Node.js and CommonJS\",recommended:false},schema:[]},create:function create(context){return{MemberExpression:function MemberExpression(node){var objectName=node.object.name,propertyName=node.property.name;if(objectName===\"process\"&&!node.computed&&propertyName&&propertyName===\"env\"){context.report({node:node,message:\"Unexpected use of process.env.\"});}}};}};},{}],761:[function(require,module,exports){/**\n * @fileoverview Disallow the use of process.exit()\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `process.exit()`\",category:\"Node.js and CommonJS\",recommended:false},schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{\"CallExpression > MemberExpression.callee[object.name = 'process'][property.name = 'exit']\":function CallExpressionMemberExpressionCalleeObjectNameProcessPropertyNameExit(node){context.report({node:node.parent,message:\"Don't use process.exit(); throw an error instead.\"});}};}};},{}],762:[function(require,module,exports){/**\n * @fileoverview Rule to flag usage of __proto__ property\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of the `__proto__` property\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{MemberExpression:function MemberExpression(node){if(node.property&&node.property.type===\"Identifier\"&&node.property.name===\"__proto__\"&&!node.computed||node.property.type===\"Literal\"&&node.property.value===\"__proto__\"){context.report({node:node,message:\"The '__proto__' property is deprecated.\"});}}};}};},{}],763:[function(require,module,exports){/**\n * @fileoverview Rule to disallow use of Object.prototype builtins on objects\n * @author Andrew Levine\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow calling some `Object.prototype` methods directly on objects\",category:\"Possible Errors\",recommended:false},schema:[]},create:function create(context){var DISALLOWED_PROPS=[\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\"];/**\n         * Reports if a disallowed property is used in a CallExpression\n         * @param {ASTNode} node The CallExpression node.\n         * @returns {void}\n         */function disallowBuiltIns(node){if(node.callee.type!==\"MemberExpression\"||node.callee.computed){return;}var propName=node.callee.property.name;if(DISALLOWED_PROPS.indexOf(propName)>-1){context.report({message:\"Do not access Object.prototype method '{{prop}}' from target object.\",loc:node.callee.property.loc.start,data:{prop:propName},node:node});}}return{CallExpression:disallowBuiltIns};}};},{}],764:[function(require,module,exports){/**\n * @fileoverview Rule to flag when the same variable is declared more then once.\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow variable redeclaration\",category:\"Best Practices\",recommended:true},schema:[{type:\"object\",properties:{builtinGlobals:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options={builtinGlobals:Boolean(context.options[0]&&context.options[0].builtinGlobals)};/**\n         * Find variables in a given scope and flag redeclared ones.\n         * @param {Scope} scope - An escope scope object.\n         * @returns {void}\n         * @private\n         */function findVariablesInScope(scope){scope.variables.forEach(function(variable){var hasBuiltin=options.builtinGlobals&&\"writeable\"in variable;var count=(hasBuiltin?1:0)+variable.identifiers.length;if(count>=2){variable.identifiers.sort(function(a,b){return a.range[1]-b.range[1];});for(var i=hasBuiltin?0:1,l=variable.identifiers.length;i<l;i++){context.report({node:variable.identifiers[i],message:\"'{{a}}' is already defined.\",data:{a:variable.name}});}}});}/**\n         * Find variables in the current scope.\n         * @param {ASTNode} node - The Program node.\n         * @returns {void}\n         * @private\n         */function checkForGlobal(node){var scope=context.getScope(),parserOptions=context.parserOptions,ecmaFeatures=parserOptions.ecmaFeatures||{};// Nodejs env or modules has a special scope.\nif(ecmaFeatures.globalReturn||node.sourceType===\"module\"){findVariablesInScope(scope.childScopes[0]);}else{findVariablesInScope(scope);}}/**\n         * Find variables in the current scope.\n         * @returns {void}\n         * @private\n         */function checkForBlock(){findVariablesInScope(context.getScope());}if(context.parserOptions.ecmaVersion>=6){return{Program:checkForGlobal,BlockStatement:checkForBlock,SwitchStatement:checkForBlock};}return{Program:checkForGlobal,FunctionDeclaration:checkForBlock,FunctionExpression:checkForBlock,ArrowFunctionExpression:checkForBlock};}};},{}],765:[function(require,module,exports){/**\n * @fileoverview Rule to count multiple spaces in regular expressions\n * @author Matt DuVall <http://www.mattduvall.com/>\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow multiple spaces in regular expressions\",category:\"Possible Errors\",recommended:true},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();/**\n         * Validate regular expressions\n         * @param {ASTNode} node node to validate\n         * @param {string} value regular expression to validate\n         * @param {number} valueStart The start location of the regex/string literal. It will always be the case that\n         `sourceCode.getText().slice(valueStart, valueStart + value.length) === value`\n         * @returns {void}\n         * @private\n         */function checkRegex(node,value,valueStart){var multipleSpacesRegex=/( {2,})+?/,regexResults=multipleSpacesRegex.exec(value);if(regexResults!==null){var count=regexResults[0].length;context.report({node:node,message:\"Spaces are hard to count. Use {{{count}}}.\",data:{count:count},fix:function fix(fixer){return fixer.replaceTextRange([valueStart+regexResults.index,valueStart+regexResults.index+count],\" {\"+count+\"}\");}});/*\n                 * TODO: (platinumazure) Fix message to use rule message\n                 * substitution when api.report is fixed in lib/eslint.js.\n                 */}}/**\n         * Validate regular expression literals\n         * @param {ASTNode} node node to validate\n         * @returns {void}\n         * @private\n         */function checkLiteral(node){var token=sourceCode.getFirstToken(node),nodeType=token.type,nodeValue=token.value;if(nodeType===\"RegularExpression\"){checkRegex(node,nodeValue,token.start);}}/**\n         * Check if node is a string\n         * @param {ASTNode} node node to evaluate\n         * @returns {boolean} True if its a string\n         * @private\n         */function isString(node){return node&&node.type===\"Literal\"&&typeof node.value===\"string\";}/**\n         * Validate strings passed to the RegExp constructor\n         * @param {ASTNode} node node to validate\n         * @returns {void}\n         * @private\n         */function checkFunction(node){var scope=context.getScope();var regExpVar=astUtils.getVariableByName(scope,\"RegExp\");var shadowed=regExpVar&&regExpVar.defs.length>0;if(node.callee.type===\"Identifier\"&&node.callee.name===\"RegExp\"&&isString(node.arguments[0])&&!shadowed){checkRegex(node,node.arguments[0].value,node.arguments[0].start+1);}}return{Literal:checkLiteral,CallExpression:checkFunction,NewExpression:checkFunction};}};},{\"../ast-utils\":605}],766:[function(require,module,exports){/**\n * @fileoverview Restrict usage of specified globals.\n * @author Benoît Zugmeyer\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow specified global variables\",category:\"Variables\",recommended:false},schema:{type:\"array\",items:{type:\"string\"},uniqueItems:true}},create:function create(context){var restrictedGlobals=context.options;// if no globals are restricted we don't need to check\nif(restrictedGlobals.length===0){return{};}/**\n         * Report a variable to be used as a restricted global.\n         * @param {Reference} reference the variable reference\n         * @returns {void}\n         * @private\n         */function reportReference(reference){context.report({node:reference.identifier,message:\"Unexpected use of '{{name}}'.\",data:{name:reference.identifier.name}});}/**\n         * Check if the given name is a restricted global name.\n         * @param {string} name name of a variable\n         * @returns {boolean} whether the variable is a restricted global or not\n         * @private\n         */function isRestricted(name){return restrictedGlobals.indexOf(name)>=0;}return{Program:function Program(){var scope=context.getScope();// Report variables declared elsewhere (ex: variables defined as \"global\" by eslint)\nscope.variables.forEach(function(variable){if(!variable.defs.length&&isRestricted(variable.name)){variable.references.forEach(reportReference);}});// Report variables not declared at all\nscope.through.forEach(function(reference){if(isRestricted(reference.identifier.name)){reportReference(reference);}});}};}};},{}],767:[function(require,module,exports){/**\n * @fileoverview Restrict usage of specified node imports.\n * @author Guy Ellis\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var ignore=require(\"ignore\");var arrayOfStrings={type:\"array\",items:{type:\"string\"},uniqueItems:true};module.exports={meta:{docs:{description:\"disallow specified modules when loaded by `import`\",category:\"ECMAScript 6\",recommended:false},schema:{anyOf:[arrayOfStrings,{type:\"array\",items:[{type:\"object\",properties:{paths:arrayOfStrings,patterns:arrayOfStrings},additionalProperties:false}],additionalItems:false}]}},create:function create(context){var options=Array.isArray(context.options)?context.options:[];var isStringArray=_typeof(options[0])!==\"object\";var restrictedPaths=new _set3.default(isStringArray?context.options:options[0].paths||[]);var restrictedPatterns=isStringArray?[]:options[0].patterns||[];// if no imports are restricted we don\"t need to check\nif(restrictedPaths.size===0&&restrictedPatterns.length===0){return{};}var ig=ignore().add(restrictedPatterns);return{ImportDeclaration:function ImportDeclaration(node){if(node&&node.source&&node.source.value){var importName=node.source.value.trim();if(restrictedPaths.has(importName)){context.report({node:node,message:\"'{{importName}}' import is restricted from being used.\",data:{importName:importName}});}if(restrictedPatterns.length>0&&ig.ignores(importName)){context.report({node:node,message:\"'{{importName}}' import is restricted from being used by a pattern.\",data:{importName:importName}});}}}};}};},{\"ignore\":377}],768:[function(require,module,exports){/**\n * @fileoverview Restrict usage of specified node modules.\n * @author Christian Schulz\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var ignore=require(\"ignore\");var arrayOfStrings={type:\"array\",items:{type:\"string\"},uniqueItems:true};module.exports={meta:{docs:{description:\"disallow specified modules when loaded by `require`\",category:\"Node.js and CommonJS\",recommended:false},schema:{anyOf:[arrayOfStrings,{type:\"array\",items:[{type:\"object\",properties:{paths:arrayOfStrings,patterns:arrayOfStrings},additionalProperties:false}],additionalItems:false}]}},create:function create(context){var options=Array.isArray(context.options)?context.options:[];var isStringArray=_typeof(options[0])!==\"object\";var restrictedPaths=new _set3.default(isStringArray?context.options:options[0].paths||[]);var restrictedPatterns=isStringArray?[]:options[0].patterns||[];// if no imports are restricted we don\"t need to check\nif(restrictedPaths.size===0&&restrictedPatterns.length===0){return{};}var ig=ignore().add(restrictedPatterns);/**\n         * Function to check if a node is a string literal.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} If the node is a string literal.\n         */function isString(node){return node&&node.type===\"Literal\"&&typeof node.value===\"string\";}/**\n         * Function to check if a node is a require call.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} If the node is a require call.\n         */function isRequireCall(node){return node.callee.type===\"Identifier\"&&node.callee.name===\"require\";}return{CallExpression:function CallExpression(node){if(isRequireCall(node)){// node has arguments and first argument is string\nif(node.arguments.length&&isString(node.arguments[0])){var moduleName=node.arguments[0].value.trim();// check if argument value is in restricted modules array\nif(restrictedPaths.has(moduleName)){context.report({node:node,message:\"'{{moduleName}}' module is restricted from being used.\",data:{moduleName:moduleName}});}if(restrictedPatterns.length>0&&ig.ignores(moduleName)){context.report({node:node,message:\"'{{moduleName}}' module is restricted from being used by a pattern.\",data:{moduleName:moduleName}});}}}}};}};},{\"ignore\":377}],769:[function(require,module,exports){/**\n * @fileoverview Rule to disallow certain object properties\n * @author Will Klein & Eli White\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow certain properties on certain objects\",category:\"Best Practices\",recommended:false},schema:{type:\"array\",items:{anyOf:[// `object` and `property` are both optional, but at least one of them must be provided.\n{type:\"object\",properties:{object:{type:\"string\"},property:{type:\"string\"},message:{type:\"string\"}},additionalProperties:false,required:[\"object\"]},{type:\"object\",properties:{object:{type:\"string\"},property:{type:\"string\"},message:{type:\"string\"}},additionalProperties:false,required:[\"property\"]}]},uniqueItems:true}},create:function create(context){var restrictedCalls=context.options;if(restrictedCalls.length===0){return{};}var restrictedProperties=new _map4.default();var globallyRestrictedObjects=new _map4.default();var globallyRestrictedProperties=new _map4.default();restrictedCalls.forEach(function(option){var objectName=option.object;var propertyName=option.property;if(typeof objectName===\"undefined\"){globallyRestrictedProperties.set(propertyName,{message:option.message});}else if(typeof propertyName===\"undefined\"){globallyRestrictedObjects.set(objectName,{message:option.message});}else{if(!restrictedProperties.has(objectName)){restrictedProperties.set(objectName,new _map4.default());}restrictedProperties.get(objectName).set(propertyName,{message:option.message});}});/**\n        * Checks to see whether a property access is restricted, and reports it if so.\n        * @param {ASTNode} node The node to report\n        * @param {string} objectName The name of the object\n        * @param {string} propertyName The name of the property\n        * @returns {undefined}\n        */function checkPropertyAccess(node,objectName,propertyName){if(propertyName===null){return;}var matchedObject=restrictedProperties.get(objectName);var matchedObjectProperty=matchedObject?matchedObject.get(propertyName):globallyRestrictedObjects.get(objectName);var globalMatchedProperty=globallyRestrictedProperties.get(propertyName);if(matchedObjectProperty){var message=matchedObjectProperty.message?\" \"+matchedObjectProperty.message:\"\";// eslint-disable-next-line eslint-plugin/report-message-format\ncontext.report({node:node,message:\"'{{objectName}}.{{propertyName}}' is restricted from being used.{{message}}\",data:{objectName:objectName,propertyName:propertyName,message:message}});}else if(globalMatchedProperty){var _message=globalMatchedProperty.message?\" \"+globalMatchedProperty.message:\"\";// eslint-disable-next-line eslint-plugin/report-message-format\ncontext.report({node:node,message:\"'{{propertyName}}' is restricted from being used.{{message}}\",data:{propertyName:propertyName,message:_message}});}}/**\n        * Checks property accesses in a destructuring assignment expression, e.g. `var foo; ({foo} = bar);`\n        * @param {ASTNode} node An AssignmentExpression or AssignmentPattern node\n        * @returns {undefined}\n        */function checkDestructuringAssignment(node){if(node.right.type===\"Identifier\"){var objectName=node.right.name;if(node.left.type===\"ObjectPattern\"){node.left.properties.forEach(function(property){checkPropertyAccess(node.left,objectName,astUtils.getStaticPropertyName(property));});}}}return{MemberExpression:function MemberExpression(node){checkPropertyAccess(node,node.object&&node.object.name,astUtils.getStaticPropertyName(node));},VariableDeclarator:function VariableDeclarator(node){if(node.init&&node.init.type===\"Identifier\"){var objectName=node.init.name;if(node.id.type===\"ObjectPattern\"){node.id.properties.forEach(function(property){checkPropertyAccess(node.id,objectName,astUtils.getStaticPropertyName(property));});}}},AssignmentExpression:checkDestructuringAssignment,AssignmentPattern:checkDestructuringAssignment};}};},{\"../ast-utils\":605}],770:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of certain node types\n * @author Burak Yigit Kaya\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nfunction _defineProperty(obj,key,value){if(key in obj){(0,_defineProperty3.default)(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}module.exports={meta:{docs:{description:\"disallow specified syntax\",category:\"Stylistic Issues\",recommended:false},schema:{type:\"array\",items:[{oneOf:[{type:\"string\"},{type:\"object\",properties:{selector:{type:\"string\"},message:{type:\"string\"}},required:[\"selector\"],additionalProperties:false}]}],uniqueItems:true,minItems:0}},create:function create(context){return context.options.reduce(function(result,selectorOrObject){var isStringFormat=typeof selectorOrObject===\"string\";var hasCustomMessage=!isStringFormat&&Boolean(selectorOrObject.message);var selector=isStringFormat?selectorOrObject:selectorOrObject.selector;var message=hasCustomMessage?selectorOrObject.message:\"Using '{{selector}}' is not allowed.\";return(0,_assign4.default)(result,_defineProperty({},selector,function(node){context.report({node:node,message:message,data:hasCustomMessage?{}:{selector:selector}});}));},{});}};},{}],771:[function(require,module,exports){/**\n * @fileoverview Rule to flag when return statement contains assignment\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar SENTINEL_TYPE=/^(?:[a-zA-Z]+?Statement|ArrowFunctionExpression|FunctionExpression|ClassExpression)$/;//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow assignment operators in `return` statements\",category:\"Best Practices\",recommended:false},schema:[{enum:[\"except-parens\",\"always\"]}]},create:function create(context){var always=(context.options[0]||\"except-parens\")!==\"except-parens\";var sourceCode=context.getSourceCode();return{AssignmentExpression:function AssignmentExpression(node){if(!always&&astUtils.isParenthesised(sourceCode,node)){return;}var parent=node.parent;// Find ReturnStatement or ArrowFunctionExpression in ancestors.\nwhile(parent&&!SENTINEL_TYPE.test(parent.type)){node=parent;parent=parent.parent;}// Reports.\nif(parent&&parent.type===\"ReturnStatement\"){context.report({node:parent,message:\"Return statement should not contain assignment.\"});}else if(parent&&parent.type===\"ArrowFunctionExpression\"&&parent.body===node){context.report({node:parent,message:\"Arrow function should not return assignment.\"});}}};}};},{\"../ast-utils\":605}],772:[function(require,module,exports){/**\n * @fileoverview Disallows unnecessary `return await`\n * @author Jordan Harband\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar message=\"Redundant use of `await` on a return value.\";module.exports={meta:{docs:{description:\"disallow unnecessary `return await`\",category:\"Best Practices\",recommended:false// TODO: set to true\n},fixable:null,schema:[]},create:function create(context){/**\n         * Reports a found unnecessary `await` expression.\n         * @param {ASTNode} node The node representing the `await` expression to report\n         * @returns {void}\n         */function reportUnnecessaryAwait(node){context.report({node:context.getSourceCode().getFirstToken(node),loc:node.loc,message:message});}/**\n        * Determines whether a thrown error from this node will be caught/handled within this function rather than immediately halting\n        * this function. For example, a statement in a `try` block will always have an error handler. A statement in\n        * a `catch` block will only have an error handler if there is also a `finally` block.\n        * @param {ASTNode} node A node representing a location where an could be thrown\n        * @returns {boolean} `true` if a thrown error will be caught/handled in this function\n        */function hasErrorHandler(node){var ancestor=node;while(!astUtils.isFunction(ancestor)&&ancestor.type!==\"Program\"){if(ancestor.parent.type===\"TryStatement\"&&(ancestor===ancestor.parent.block||ancestor===ancestor.parent.handler&&ancestor.parent.finalizer)){return true;}ancestor=ancestor.parent;}return false;}/**\n         * Checks if a node is placed in tail call position. Once `return` arguments (or arrow function expressions) can be a complex expression,\n         * an `await` expression could or could not be unnecessary by the definition of this rule. So we're looking for `await` expressions that are in tail position.\n         * @param {ASTNode} node A node representing the `await` expression to check\n         * @returns {boolean} The checking result\n         */function isInTailCallPosition(node){if(node.parent.type===\"ArrowFunctionExpression\"){return true;}if(node.parent.type===\"ReturnStatement\"){return!hasErrorHandler(node.parent);}if(node.parent.type===\"ConditionalExpression\"&&(node===node.parent.consequent||node===node.parent.alternate)){return isInTailCallPosition(node.parent);}if(node.parent.type===\"LogicalExpression\"&&node===node.parent.right){return isInTailCallPosition(node.parent);}if(node.parent.type===\"SequenceExpression\"&&node===node.parent.expressions[node.parent.expressions.length-1]){return isInTailCallPosition(node.parent);}return false;}return{AwaitExpression:function AwaitExpression(node){if(isInTailCallPosition(node)&&!hasErrorHandler(node)){reportUnnecessaryAwait(node);}}};}};},{\"../ast-utils\":605}],773:[function(require,module,exports){/**\n * @fileoverview Rule to flag when using javascript: urls\n * @author Ilya Volodin\n *//* jshint scripturl: true *//* eslint no-script-url: 0 */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `javascript:` urls\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{Literal:function Literal(node){if(node.value&&typeof node.value===\"string\"){var value=node.value.toLowerCase();if(value.indexOf(\"javascript:\")===0){context.report({node:node,message:\"Script URL is a form of eval.\"});}}}};}};},{}],774:[function(require,module,exports){/**\n * @fileoverview Rule to disallow assignments where both sides are exactly the same\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar SPACES=/\\s+/g;/**\n * Checks whether the property of 2 given member expression nodes are the same\n * property or not.\n *\n * @param {ASTNode} left - A member expression node to check.\n * @param {ASTNode} right - Another member expression node to check.\n * @returns {boolean} `true` if the member expressions have the same property.\n */function isSameProperty(left,right){if(left.property.type===\"Identifier\"&&left.property.type===right.property.type&&left.property.name===right.property.name&&left.computed===right.computed){return true;}var lname=astUtils.getStaticPropertyName(left);var rname=astUtils.getStaticPropertyName(right);return lname!==null&&lname===rname;}/**\n * Checks whether 2 given member expression nodes are the reference to the same\n * property or not.\n *\n * @param {ASTNode} left - A member expression node to check.\n * @param {ASTNode} right - Another member expression node to check.\n * @returns {boolean} `true` if the member expressions are the reference to the\n *  same property or not.\n */function isSameMember(left,right){if(!isSameProperty(left,right)){return false;}var lobj=left.object;var robj=right.object;if(lobj.type!==robj.type){return false;}if(lobj.type===\"MemberExpression\"){return isSameMember(lobj,robj);}return lobj.type===\"Identifier\"&&lobj.name===robj.name;}/**\n * Traverses 2 Pattern nodes in parallel, then reports self-assignments.\n *\n * @param {ASTNode|null} left - A left node to traverse. This is a Pattern or\n *      a Property.\n * @param {ASTNode|null} right - A right node to traverse. This is a Pattern or\n *      a Property.\n * @param {boolean} props - The flag to check member expressions as well.\n * @param {Function} report - A callback function to report.\n * @returns {void}\n */function eachSelfAssignment(left,right,props,report){if(!left||!right){// do nothing\n}else if(left.type===\"Identifier\"&&right.type===\"Identifier\"&&left.name===right.name){report(right);}else if(left.type===\"ArrayPattern\"&&right.type===\"ArrayExpression\"){var end=Math.min(left.elements.length,right.elements.length);for(var i=0;i<end;++i){var rightElement=right.elements[i];eachSelfAssignment(left.elements[i],rightElement,props,report);// After a spread element, those indices are unknown.\nif(rightElement&&rightElement.type===\"SpreadElement\"){break;}}}else if(left.type===\"RestElement\"&&right.type===\"SpreadElement\"){eachSelfAssignment(left.argument,right.argument,props,report);}else if(left.type===\"ObjectPattern\"&&right.type===\"ObjectExpression\"&&right.properties.length>=1){// Gets the index of the last spread property.\n// It's possible to overwrite properties followed by it.\nvar startJ=0;for(var _i=right.properties.length-1;_i>=0;--_i){if(right.properties[_i].type===\"ExperimentalSpreadProperty\"){startJ=_i+1;break;}}for(var _i2=0;_i2<left.properties.length;++_i2){for(var j=startJ;j<right.properties.length;++j){eachSelfAssignment(left.properties[_i2],right.properties[j],props,report);}}}else if(left.type===\"Property\"&&right.type===\"Property\"&&!left.computed&&!right.computed&&right.kind===\"init\"&&!right.method&&left.key.name===right.key.name){eachSelfAssignment(left.value,right.value,props,report);}else if(props&&left.type===\"MemberExpression\"&&right.type===\"MemberExpression\"&&isSameMember(left,right)){report(right);}}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow assignments where both sides are exactly the same\",category:\"Best Practices\",recommended:true},schema:[{type:\"object\",properties:{props:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();var options=context.options[0];var props=Boolean(options&&options.props);/**\n         * Reports a given node as self assignments.\n         *\n         * @param {ASTNode} node - A node to report. This is an Identifier node.\n         * @returns {void}\n         */function report(node){context.report({node:node,message:\"'{{name}}' is assigned to itself.\",data:{name:sourceCode.getText(node).replace(SPACES,\"\")}});}return{AssignmentExpression:function AssignmentExpression(node){if(node.operator===\"=\"){eachSelfAssignment(node.left,node.right,props,report);}}};}};},{\"../ast-utils\":605}],775:[function(require,module,exports){/**\n * @fileoverview Rule to flag comparison where left part is the same as the right\n * part.\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow comparisons where both sides are exactly the same\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{BinaryExpression:function BinaryExpression(node){var operators=[\"===\",\"==\",\"!==\",\"!=\",\">\",\"<\",\">=\",\"<=\"];if(operators.indexOf(node.operator)>-1&&(node.left.type===\"Identifier\"&&node.right.type===\"Identifier\"&&node.left.name===node.right.name||node.left.type===\"Literal\"&&node.right.type===\"Literal\"&&node.left.value===node.right.value)){context.report({node:node,message:\"Comparing to itself is potentially pointless.\"});}}};}};},{}],776:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of comma operator\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow comma operators\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();/**\n         * Parts of the grammar that are required to have parens.\n         */var parenthesized={DoWhileStatement:\"test\",IfStatement:\"test\",SwitchStatement:\"discriminant\",WhileStatement:\"test\",WithStatement:\"object\",ArrowFunctionExpression:\"body\"// Omitting CallExpression - commas are parsed as argument separators\n// Omitting NewExpression - commas are parsed as argument separators\n// Omitting ForInStatement - parts aren't individually parenthesised\n// Omitting ForStatement - parts aren't individually parenthesised\n};/**\n         * Determines whether a node is required by the grammar to be wrapped in\n         * parens, e.g. the test of an if statement.\n         * @param {ASTNode} node - The AST node\n         * @returns {boolean} True if parens around node belong to parent node.\n         */function requiresExtraParens(node){return node.parent&&parenthesized[node.parent.type]&&node===node.parent[parenthesized[node.parent.type]];}/**\n         * Check if a node is wrapped in parens.\n         * @param {ASTNode} node - The AST node\n         * @returns {boolean} True if the node has a paren on each side.\n         */function isParenthesised(node){return astUtils.isParenthesised(sourceCode,node);}/**\n         * Check if a node is wrapped in two levels of parens.\n         * @param {ASTNode} node - The AST node\n         * @returns {boolean} True if two parens surround the node on each side.\n         */function isParenthesisedTwice(node){var previousToken=sourceCode.getTokenBefore(node,1),nextToken=sourceCode.getTokenAfter(node,1);return isParenthesised(node)&&previousToken&&nextToken&&astUtils.isOpeningParenToken(previousToken)&&previousToken.range[1]<=node.range[0]&&astUtils.isClosingParenToken(nextToken)&&nextToken.range[0]>=node.range[1];}return{SequenceExpression:function SequenceExpression(node){// Always allow sequences in for statement update\nif(node.parent.type===\"ForStatement\"&&(node===node.parent.init||node===node.parent.update)){return;}// Wrapping a sequence in extra parens indicates intent\nif(requiresExtraParens(node)){if(isParenthesisedTwice(node)){return;}}else{if(isParenthesised(node)){return;}}var child=sourceCode.getTokenAfter(node.expressions[0]);context.report({node:node,loc:child.loc.start,message:\"Unexpected use of comma operator.\"});}};}};},{\"../ast-utils\":605}],777:[function(require,module,exports){/**\n * @fileoverview Disallow shadowing of NaN, undefined, and Infinity (ES5 section 15.1.1)\n * @author Michael Ficarra\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow identifiers from shadowing restricted names\",category:\"Variables\",recommended:false},schema:[]},create:function create(context){var RESTRICTED=[\"undefined\",\"NaN\",\"Infinity\",\"arguments\",\"eval\"];/**\n         * Check if the node name is present inside the restricted list\n         * @param {ASTNode} id id to evaluate\n         * @returns {void}\n         * @private\n         */function checkForViolation(id){if(RESTRICTED.indexOf(id.name)>-1){context.report({node:id,message:\"Shadowing of global property '{{idName}}'.\",data:{idName:id.name}});}}return{VariableDeclarator:function VariableDeclarator(node){checkForViolation(node.id);},ArrowFunctionExpression:function ArrowFunctionExpression(node){[].map.call(node.params,checkForViolation);},FunctionExpression:function FunctionExpression(node){if(node.id){checkForViolation(node.id);}[].map.call(node.params,checkForViolation);},FunctionDeclaration:function FunctionDeclaration(node){if(node.id){checkForViolation(node.id);[].map.call(node.params,checkForViolation);}},CatchClause:function CatchClause(node){checkForViolation(node.param);}};}};},{}],778:[function(require,module,exports){/**\n * @fileoverview Rule to flag on declaring variables already declared in the outer scope\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow variable declarations from shadowing variables declared in the outer scope\",category:\"Variables\",recommended:false},schema:[{type:\"object\",properties:{builtinGlobals:{type:\"boolean\"},hoist:{enum:[\"all\",\"functions\",\"never\"]},allow:{type:\"array\",items:{type:\"string\"}}},additionalProperties:false}]},create:function create(context){var options={builtinGlobals:Boolean(context.options[0]&&context.options[0].builtinGlobals),hoist:context.options[0]&&context.options[0].hoist||\"functions\",allow:context.options[0]&&context.options[0].allow||[]};/**\n         * Check if variable name is allowed.\n         *\n         * @param  {ASTNode} variable The variable to check.\n         * @returns {boolean} Whether or not the variable name is allowed.\n         */function isAllowed(variable){return options.allow.indexOf(variable.name)!==-1;}/**\n         * Checks if a variable of the class name in the class scope of ClassDeclaration.\n         *\n         * ClassDeclaration creates two variables of its name into its outer scope and its class scope.\n         * So we should ignore the variable in the class scope.\n         *\n         * @param {Object} variable The variable to check.\n         * @returns {boolean} Whether or not the variable of the class name in the class scope of ClassDeclaration.\n         */function isDuplicatedClassNameVariable(variable){var block=variable.scope.block;return block.type===\"ClassDeclaration\"&&block.id===variable.identifiers[0];}/**\n         * Checks if a variable is inside the initializer of scopeVar.\n         *\n         * To avoid reporting at declarations such as `var a = function a() {};`.\n         * But it should report `var a = function(a) {};` or `var a = function() { function a() {} };`.\n         *\n         * @param {Object} variable The variable to check.\n         * @param {Object} scopeVar The scope variable to look for.\n         * @returns {boolean} Whether or not the variable is inside initializer of scopeVar.\n         */function isOnInitializer(variable,scopeVar){var outerScope=scopeVar.scope;var outerDef=scopeVar.defs[0];var outer=outerDef&&outerDef.parent&&outerDef.parent.range;var innerScope=variable.scope;var innerDef=variable.defs[0];var inner=innerDef&&innerDef.name.range;return outer&&inner&&outer[0]<inner[0]&&inner[1]<outer[1]&&(innerDef.type===\"FunctionName\"&&innerDef.node.type===\"FunctionExpression\"||innerDef.node.type===\"ClassExpression\")&&outerScope===innerScope.upper;}/**\n         * Get a range of a variable's identifier node.\n         * @param {Object} variable The variable to get.\n         * @returns {Array|undefined} The range of the variable's identifier node.\n         */function getNameRange(variable){var def=variable.defs[0];return def&&def.name.range;}/**\n         * Checks if a variable is in TDZ of scopeVar.\n         * @param {Object} variable The variable to check.\n         * @param {Object} scopeVar The variable of TDZ.\n         * @returns {boolean} Whether or not the variable is in TDZ of scopeVar.\n         */function isInTdz(variable,scopeVar){var outerDef=scopeVar.defs[0];var inner=getNameRange(variable);var outer=getNameRange(scopeVar);return inner&&outer&&inner[1]<outer[0]&&(// Excepts FunctionDeclaration if is {\"hoist\":\"function\"}.\noptions.hoist!==\"functions\"||!outerDef||outerDef.node.type!==\"FunctionDeclaration\");}/**\n         * Checks the current context for shadowed variables.\n         * @param {Scope} scope - Fixme\n         * @returns {void}\n         */function checkForShadows(scope){var variables=scope.variables;for(var i=0;i<variables.length;++i){var variable=variables[i];// Skips \"arguments\" or variables of a class name in the class scope of ClassDeclaration.\nif(variable.identifiers.length===0||isDuplicatedClassNameVariable(variable)||isAllowed(variable)){continue;}// Gets shadowed variable.\nvar shadowed=astUtils.getVariableByName(scope.upper,variable.name);if(shadowed&&(shadowed.identifiers.length>0||options.builtinGlobals&&\"writeable\"in shadowed)&&!isOnInitializer(variable,shadowed)&&!(options.hoist!==\"all\"&&isInTdz(variable,shadowed))){context.report({node:variable.identifiers[0],message:\"'{{name}}' is already declared in the upper scope.\",data:variable});}}}return{\"Program:exit\":function ProgramExit(){var globalScope=context.getScope();var stack=globalScope.childScopes.slice();while(stack.length){var scope=stack.pop();stack.push.apply(stack,scope.childScopes);checkForShadows(scope);}}};}};},{\"../ast-utils\":605}],779:[function(require,module,exports){/**\n * @fileoverview Rule to check that spaced function application\n * @author Matt DuVall <http://www.mattduvall.com>\n * @deprecated in ESLint v3.3.0\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow spacing between function identifiers and their applications (deprecated)\",category:\"Stylistic Issues\",recommended:false,replacedBy:[\"func-call-spacing\"]},deprecated:true,fixable:\"whitespace\",schema:[]},create:function create(context){var sourceCode=context.getSourceCode();/**\n         * Check if open space is present in a function name\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function detectOpenSpaces(node){var lastCalleeToken=sourceCode.getLastToken(node.callee);var prevToken=lastCalleeToken,parenToken=sourceCode.getTokenAfter(lastCalleeToken);// advances to an open parenthesis.\nwhile(parenToken&&parenToken.range[1]<node.range[1]&&parenToken.value!==\"(\"){prevToken=parenToken;parenToken=sourceCode.getTokenAfter(parenToken);}// look for a space between the callee and the open paren\nif(parenToken&&parenToken.range[1]<node.range[1]&&sourceCode.isSpaceBetweenTokens(prevToken,parenToken)){context.report({node:node,loc:lastCalleeToken.loc.start,message:\"Unexpected space between function name and paren.\",fix:function fix(fixer){return fixer.removeRange([prevToken.range[1],parenToken.range[0]]);}});}}return{CallExpression:detectOpenSpaces,NewExpression:detectOpenSpaces};}};},{}],780:[function(require,module,exports){/**\n * @fileoverview Disallow sparse arrays\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow sparse arrays\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{ArrayExpression:function ArrayExpression(node){var emptySpot=node.elements.indexOf(null)>-1;if(emptySpot){context.report({node:node,message:\"Unexpected comma in middle of array.\"});}}};}};},{}],781:[function(require,module,exports){/**\n * @fileoverview Rule to check for properties whose identifier ends with the string Sync\n * @author Matt DuVall<http://mattduvall.com/>\n *//* jshint node:true */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow synchronous methods\",category:\"Node.js and CommonJS\",recommended:false},schema:[]},create:function create(context){return{\"MemberExpression[property.name=/.*Sync$/]\":function MemberExpressionPropertyNameSync$(node){context.report({node:node,message:\"Unexpected sync method: '{{propertyName}}'.\",data:{propertyName:node.property.name}});}};}};},{}],782:[function(require,module,exports){/**\n * @fileoverview Rule to check for tabs inside a file\n * @author Gyandeep Singh\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar regex=/\\t/;//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow all tabs\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){return{Program:function Program(node){context.getSourceLines().forEach(function(line,index){var match=regex.exec(line);if(match){context.report({node:node,loc:{line:index+1,column:match.index+1},message:\"Unexpected tab character.\"});}});}};}};},{}],783:[function(require,module,exports){/**\n * @fileoverview Warn when using template string syntax in regular strings\n * @author Jeroen Engels\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow template literal placeholder syntax in regular strings\",category:\"Possible Errors\",recommended:false},schema:[]},create:function create(context){var regex=/\\$\\{[^}]+\\}/;return{Literal:function Literal(node){if(typeof node.value===\"string\"&&regex.test(node.value)){context.report({node:node,message:\"Unexpected template string expression.\"});}}};}};},{}],784:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of ternary operators.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow ternary operators\",category:\"Stylistic Issues\",recommended:false},schema:[]},create:function create(context){return{ConditionalExpression:function ConditionalExpression(node){context.report({node:node,message:\"Ternary operator used.\"});}};}};},{}],785:[function(require,module,exports){/**\n * @fileoverview A rule to disallow using `this`/`super` before `super()`.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given node is a constructor.\n * @param {ASTNode} node - A node to check. This node type is one of\n *   `Program`, `FunctionDeclaration`, `FunctionExpression`, and\n *   `ArrowFunctionExpression`.\n * @returns {boolean} `true` if the node is a constructor.\n */function isConstructorFunction(node){return node.type===\"FunctionExpression\"&&node.parent.type===\"MethodDefinition\"&&node.parent.kind===\"constructor\";}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `this`/`super` before calling `super()` in constructors\",category:\"ECMAScript 6\",recommended:true},schema:[]},create:function create(context){/*\n         * Information for each constructor.\n         * - upper:      Information of the upper constructor.\n         * - hasExtends: A flag which shows whether the owner class has a valid\n         *   `extends` part.\n         * - scope:      The scope of the owner class.\n         * - codePath:   The code path of this constructor.\n         */var funcInfo=null;/*\n         * Information for each code path segment.\n         * Each key is the id of a code path segment.\n         * Each value is an object:\n         * - superCalled:  The flag which shows `super()` called in all code paths.\n         * - invalidNodes: The array of invalid ThisExpression and Super nodes.\n         */var segInfoMap=(0,_create4.default)(null);/**\n         * Gets whether or not `super()` is called in a given code path segment.\n         * @param {CodePathSegment} segment - A code path segment to get.\n         * @returns {boolean} `true` if `super()` is called.\n         */function isCalled(segment){return!segment.reachable||segInfoMap[segment.id].superCalled;}/**\n         * Checks whether or not this is in a constructor.\n         * @returns {boolean} `true` if this is in a constructor.\n         */function isInConstructorOfDerivedClass(){return Boolean(funcInfo&&funcInfo.isConstructor&&funcInfo.hasExtends);}/**\n         * Checks whether or not this is before `super()` is called.\n         * @returns {boolean} `true` if this is before `super()` is called.\n         */function isBeforeCallOfSuper(){return isInConstructorOfDerivedClass(funcInfo)&&!funcInfo.codePath.currentSegments.every(isCalled);}/**\n         * Sets a given node as invalid.\n         * @param {ASTNode} node - A node to set as invalid. This is one of\n         *      a ThisExpression and a Super.\n         * @returns {void}\n         */function setInvalid(node){var segments=funcInfo.codePath.currentSegments;for(var i=0;i<segments.length;++i){var segment=segments[i];if(segment.reachable){segInfoMap[segment.id].invalidNodes.push(node);}}}/**\n         * Sets the current segment as `super` was called.\n         * @returns {void}\n         */function setSuperCalled(){var segments=funcInfo.codePath.currentSegments;for(var i=0;i<segments.length;++i){var segment=segments[i];if(segment.reachable){segInfoMap[segment.id].superCalled=true;}}}return{/**\n             * Adds information of a constructor into the stack.\n             * @param {CodePath} codePath - A code path which was started.\n             * @param {ASTNode} node - The current node.\n             * @returns {void}\n             */onCodePathStart:function onCodePathStart(codePath,node){if(isConstructorFunction(node)){// Class > ClassBody > MethodDefinition > FunctionExpression\nvar classNode=node.parent.parent.parent;funcInfo={upper:funcInfo,isConstructor:true,hasExtends:Boolean(classNode.superClass&&!astUtils.isNullOrUndefined(classNode.superClass)),codePath:codePath};}else{funcInfo={upper:funcInfo,isConstructor:false,hasExtends:false,codePath:codePath};}},/**\n             * Removes the top of stack item.\n             *\n             * And this treverses all segments of this code path then reports every\n             * invalid node.\n             *\n             * @param {CodePath} codePath - A code path which was ended.\n             * @param {ASTNode} node - The current node.\n             * @returns {void}\n             */onCodePathEnd:function onCodePathEnd(codePath){var isDerivedClass=funcInfo.hasExtends;funcInfo=funcInfo.upper;if(!isDerivedClass){return;}codePath.traverseSegments(function(segment,controller){var info=segInfoMap[segment.id];for(var i=0;i<info.invalidNodes.length;++i){var invalidNode=info.invalidNodes[i];context.report({message:\"'{{kind}}' is not allowed before 'super()'.\",node:invalidNode,data:{kind:invalidNode.type===\"Super\"?\"super\":\"this\"}});}if(info.superCalled){controller.skip();}});},/**\n             * Initialize information of a given code path segment.\n             * @param {CodePathSegment} segment - A code path segment to initialize.\n             * @returns {void}\n             */onCodePathSegmentStart:function onCodePathSegmentStart(segment){if(!isInConstructorOfDerivedClass(funcInfo)){return;}// Initialize info.\nsegInfoMap[segment.id]={superCalled:segment.prevSegments.length>0&&segment.prevSegments.every(isCalled),invalidNodes:[]};},/**\n             * Update information of the code path segment when a code path was\n             * looped.\n             * @param {CodePathSegment} fromSegment - The code path segment of the\n             *      end of a loop.\n             * @param {CodePathSegment} toSegment - A code path segment of the head\n             *      of a loop.\n             * @returns {void}\n             */onCodePathSegmentLoop:function onCodePathSegmentLoop(fromSegment,toSegment){if(!isInConstructorOfDerivedClass(funcInfo)){return;}// Update information inside of the loop.\nfuncInfo.codePath.traverseSegments({first:toSegment,last:fromSegment},function(segment,controller){var info=segInfoMap[segment.id];if(info.superCalled){info.invalidNodes=[];controller.skip();}else if(segment.prevSegments.length>0&&segment.prevSegments.every(isCalled)){info.superCalled=true;info.invalidNodes=[];}});},/**\n             * Reports if this is before `super()`.\n             * @param {ASTNode} node - A target node.\n             * @returns {void}\n             */ThisExpression:function ThisExpression(node){if(isBeforeCallOfSuper()){setInvalid(node);}},/**\n             * Reports if this is before `super()`.\n             * @param {ASTNode} node - A target node.\n             * @returns {void}\n             */Super:function Super(node){if(!astUtils.isCallee(node)&&isBeforeCallOfSuper()){setInvalid(node);}},/**\n             * Marks `super()` called.\n             * @param {ASTNode} node - A target node.\n             * @returns {void}\n             */\"CallExpression:exit\":function CallExpressionExit(node){if(node.callee.type===\"Super\"&&isBeforeCallOfSuper()){setSuperCalled();}},/**\n             * Resets state.\n             * @returns {void}\n             */\"Program:exit\":function ProgramExit(){segInfoMap=(0,_create4.default)(null);}};}};},{\"../ast-utils\":605}],786:[function(require,module,exports){/**\n * @fileoverview Rule to restrict what can be thrown as an exception.\n * @author Dieter Oberkofler\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow throwing literals as exceptions\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{ThrowStatement:function ThrowStatement(node){if(!astUtils.couldBeError(node.argument)){context.report({node:node,message:\"Expected an object to be thrown.\"});}else if(node.argument.type===\"Identifier\"){if(node.argument.name===\"undefined\"){context.report({node:node,message:\"Do not throw undefined.\"});}}}};}};},{\"../ast-utils\":605}],787:[function(require,module,exports){/**\n * @fileoverview Disallow trailing spaces at the end of lines.\n * @author Nodeca Team <https://github.com/nodeca>\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow trailing whitespace at the end of lines\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{skipBlankLines:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();var BLANK_CLASS=\"[ \\t\\xA0\\u2000-\\u200B\\u3000]\",SKIP_BLANK=\"^\"+BLANK_CLASS+\"*$\",NONBLANK=BLANK_CLASS+\"+$\";var options=context.options[0]||{},skipBlankLines=options.skipBlankLines||false;/**\n         * Report the error message\n         * @param {ASTNode} node node to report\n         * @param {int[]} location range information\n         * @param {int[]} fixRange Range based on the whole program\n         * @returns {void}\n         */function report(node,location,fixRange){/*\n             * Passing node is a bit dirty, because message data will contain big\n             * text in `source`. But... who cares :) ?\n             * One more kludge will not make worse the bloody wizardry of this\n             * plugin.\n             */context.report({node:node,loc:location,message:\"Trailing spaces not allowed.\",fix:function fix(fixer){return fixer.removeRange(fixRange);}});}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Program:function checkTrailingSpaces(node){// Let's hack. Since Espree does not return whitespace nodes,\n// fetch the source code and do matching via regexps.\nvar re=new RegExp(NONBLANK),skipMatch=new RegExp(SKIP_BLANK),lines=sourceCode.lines,linebreaks=sourceCode.getText().match(astUtils.createGlobalLinebreakMatcher());var totalLength=0,fixRange=[];for(var i=0,ii=lines.length;i<ii;i++){var matches=re.exec(lines[i]);// Always add linebreak length to line length to accommodate for line break (\\n or \\r\\n)\n// Because during the fix time they also reserve one spot in the array.\n// Usually linebreak length is 2 for \\r\\n (CRLF) and 1 for \\n (LF)\nvar linebreakLength=linebreaks&&linebreaks[i]?linebreaks[i].length:1;var lineLength=lines[i].length+linebreakLength;if(matches){var location={line:i+1,column:matches.index};var rangeStart=totalLength+location.column;var rangeEnd=totalLength+lineLength-linebreakLength;var containingNode=sourceCode.getNodeByRangeIndex(rangeStart);if(containingNode&&containingNode.type===\"TemplateElement\"&&rangeStart>containingNode.parent.range[0]&&rangeEnd<containingNode.parent.range[1]){totalLength+=lineLength;continue;}// If the line has only whitespace, and skipBlankLines\n// is true, don't report it\nif(skipBlankLines&&skipMatch.test(lines[i])){totalLength+=lineLength;continue;}fixRange=[rangeStart,rangeEnd];report(node,location,fixRange);}totalLength+=lineLength;}}};}};},{\"../ast-utils\":605}],788:[function(require,module,exports){/**\n * @fileoverview Rule to flag when initializing to undefined\n * @author Ilya Volodin\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow initializing variables to `undefined`\",category:\"Variables\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();return{VariableDeclarator:function VariableDeclarator(node){var name=sourceCode.getText(node.id),init=node.init&&node.init.name,scope=context.getScope(),undefinedVar=astUtils.getVariableByName(scope,\"undefined\"),shadowed=undefinedVar&&undefinedVar.defs.length>0;if(init===\"undefined\"&&node.parent.kind!==\"const\"&&!shadowed){context.report({node:node,message:\"It's not necessary to initialize '{{name}}' to undefined.\",data:{name:name},fix:function fix(fixer){if(node.id.type===\"ArrayPattern\"||node.id.type===\"ObjectPattern\"){// Don't fix destructuring assignment to `undefined`.\nreturn null;}return fixer.removeRange([node.id.range[1],node.range[1]]);}});}}};}};},{\"../ast-utils\":605}],789:[function(require,module,exports){/**\n * @fileoverview Rule to flag references to undeclared variables.\n * @author Mark Macdonald\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks if the given node is the argument of a typeof operator.\n * @param {ASTNode} node The AST node being checked.\n * @returns {boolean} Whether or not the node is the argument of a typeof operator.\n */function hasTypeOfOperator(node){var parent=node.parent;return parent.type===\"UnaryExpression\"&&parent.operator===\"typeof\";}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of undeclared variables unless mentioned in `/*global */` comments\",category:\"Variables\",recommended:true},schema:[{type:\"object\",properties:{typeof:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0];var considerTypeOf=options&&options.typeof===true||false;return{\"Program:exit\":function ProgramExit()/* node */{var globalScope=context.getScope();globalScope.through.forEach(function(ref){var identifier=ref.identifier;if(!considerTypeOf&&hasTypeOfOperator(identifier)||identifier.parent&&identifier.parent.type===\"ClassProperty\"){return;}context.report({node:identifier,message:\"'{{name}}' is not defined.\",data:identifier});});}};}};},{}],790:[function(require,module,exports){/**\n * @fileoverview Rule to flag references to the undefined variable.\n * @author Michael Ficarra\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of `undefined` as an identifier\",category:\"Variables\",recommended:false},schema:[]},create:function create(context){/**\n         * Report an invalid \"undefined\" identifier node.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         */function report(node){context.report({node:node,message:\"Unexpected use of undefined.\"});}/**\n         * Checks the given scope for references to `undefined` and reports\n         * all references found.\n         * @param {escope.Scope} scope The scope to check.\n         * @returns {void}\n         */function checkScope(scope){var undefinedVar=scope.set.get(\"undefined\");if(!undefinedVar){return;}var references=undefinedVar.references;var defs=undefinedVar.defs;// Report non-initializing references (those are covered in defs below)\nreferences.filter(function(ref){return!ref.init;}).forEach(function(ref){return report(ref.identifier);});defs.forEach(function(def){return report(def.name);});}return{\"Program:exit\":function ProgramExit(){var globalScope=context.getScope();var stack=[globalScope];while(stack.length){var scope=stack.pop();stack.push.apply(stack,scope.childScopes);checkScope(scope);}}};}};},{}],791:[function(require,module,exports){/**\n * @fileoverview Rule to flag trailing underscores in variable declarations.\n * @author Matt DuVall <http://www.mattduvall.com>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow dangling underscores in identifiers\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{allow:{type:\"array\",items:{type:\"string\"}},allowAfterThis:{type:\"boolean\"},allowAfterSuper:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var ALLOWED_VARIABLES=options.allow?options.allow:[];var allowAfterThis=typeof options.allowAfterThis!==\"undefined\"?options.allowAfterThis:false;var allowAfterSuper=typeof options.allowAfterSuper!==\"undefined\"?options.allowAfterSuper:false;//-------------------------------------------------------------------------\n// Helpers\n//-------------------------------------------------------------------------\n/**\n         * Check if identifier is present inside the allowed option\n         * @param {string} identifier name of the node\n         * @returns {boolean} true if its is present\n         * @private\n         */function isAllowed(identifier){return ALLOWED_VARIABLES.some(function(ident){return ident===identifier;});}/**\n         * Check if identifier has a underscore at the end\n         * @param {ASTNode} identifier node to evaluate\n         * @returns {boolean} true if its is present\n         * @private\n         */function hasTrailingUnderscore(identifier){var len=identifier.length;return identifier!==\"_\"&&(identifier[0]===\"_\"||identifier[len-1]===\"_\");}/**\n         * Check if identifier is a special case member expression\n         * @param {ASTNode} identifier node to evaluate\n         * @returns {boolean} true if its is a special case\n         * @private\n         */function isSpecialCaseIdentifierForMemberExpression(identifier){return identifier===\"__proto__\";}/**\n         * Check if identifier is a special case variable expression\n         * @param {ASTNode} identifier node to evaluate\n         * @returns {boolean} true if its is a special case\n         * @private\n         */function isSpecialCaseIdentifierInVariableExpression(identifier){// Checks for the underscore library usage here\nreturn identifier===\"_\";}/**\n         * Check if function has a underscore at the end\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkForTrailingUnderscoreInFunctionDeclaration(node){if(node.id){var identifier=node.id.name;if(typeof identifier!==\"undefined\"&&hasTrailingUnderscore(identifier)&&!isAllowed(identifier)){context.report({node:node,message:\"Unexpected dangling '_' in '{{identifier}}'.\",data:{identifier:identifier}});}}}/**\n         * Check if variable expression has a underscore at the end\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkForTrailingUnderscoreInVariableExpression(node){var identifier=node.id.name;if(typeof identifier!==\"undefined\"&&hasTrailingUnderscore(identifier)&&!isSpecialCaseIdentifierInVariableExpression(identifier)&&!isAllowed(identifier)){context.report({node:node,message:\"Unexpected dangling '_' in '{{identifier}}'.\",data:{identifier:identifier}});}}/**\n         * Check if member expression has a underscore at the end\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkForTrailingUnderscoreInMemberExpression(node){var identifier=node.property.name,isMemberOfThis=node.object.type===\"ThisExpression\",isMemberOfSuper=node.object.type===\"Super\";if(typeof identifier!==\"undefined\"&&hasTrailingUnderscore(identifier)&&!(isMemberOfThis&&allowAfterThis)&&!(isMemberOfSuper&&allowAfterSuper)&&!isSpecialCaseIdentifierForMemberExpression(identifier)&&!isAllowed(identifier)){context.report({node:node,message:\"Unexpected dangling '_' in '{{identifier}}'.\",data:{identifier:identifier}});}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{FunctionDeclaration:checkForTrailingUnderscoreInFunctionDeclaration,VariableDeclarator:checkForTrailingUnderscoreInVariableExpression,MemberExpression:checkForTrailingUnderscoreInMemberExpression};}};},{}],792:[function(require,module,exports){/**\n * @fileoverview Rule to spot scenarios where a newline looks like it is ending a statement, but is not.\n * @author Glen Mailer\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow confusing multiline expressions\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){var FUNCTION_MESSAGE=\"Unexpected newline between function and ( of function call.\";var PROPERTY_MESSAGE=\"Unexpected newline between object and [ of property access.\";var TAGGED_TEMPLATE_MESSAGE=\"Unexpected newline between template tag and template literal.\";var sourceCode=context.getSourceCode();/**\n         * Check to see if there is a newline between the node and the following open bracket\n         * line's expression\n         * @param {ASTNode} node The node to check.\n         * @param {string} msg The error message to use.\n         * @returns {void}\n         * @private\n         */function checkForBreakAfter(node,msg){var openParen=sourceCode.getTokenAfter(node,astUtils.isNotClosingParenToken);var nodeExpressionEnd=sourceCode.getTokenBefore(openParen);if(openParen.loc.start.line!==nodeExpressionEnd.loc.end.line){context.report({node:node,loc:openParen.loc.start,message:msg,data:{char:openParen.value}});}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{MemberExpression:function MemberExpression(node){if(!node.computed){return;}checkForBreakAfter(node.object,PROPERTY_MESSAGE);},TaggedTemplateExpression:function TaggedTemplateExpression(node){if(node.tag.loc.end.line===node.quasi.loc.start.line){return;}context.report({node:node,loc:node.loc.start,message:TAGGED_TEMPLATE_MESSAGE});},CallExpression:function CallExpression(node){if(node.arguments.length===0){return;}checkForBreakAfter(node.callee,FUNCTION_MESSAGE);}};}};},{\"../ast-utils\":605}],793:[function(require,module,exports){/**\n * @fileoverview Rule to disallow use of unmodified expressions in loop conditions\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar Traverser=require(\"../util/traverser\"),astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar pushAll=Function.apply.bind(Array.prototype.push);var SENTINEL_PATTERN=/(?:(?:Call|Class|Function|Member|New|Yield)Expression|Statement|Declaration)$/;var LOOP_PATTERN=/^(?:DoWhile|For|While)Statement$/;// for-in/of statements don't have `test` property.\nvar GROUP_PATTERN=/^(?:BinaryExpression|ConditionalExpression)$/;var SKIP_PATTERN=/^(?:ArrowFunction|Class|Function)Expression$/;var DYNAMIC_PATTERN=/^(?:Call|Member|New|TaggedTemplate|Yield)Expression$/;/**\n * @typedef {Object} LoopConditionInfo\n * @property {escope.Reference} reference - The reference.\n * @property {ASTNode} group - BinaryExpression or ConditionalExpression nodes\n *      that the reference is belonging to.\n * @property {Function} isInLoop - The predicate which checks a given reference\n *      is in this loop.\n * @property {boolean} modified - The flag that the reference is modified in\n *      this loop.\n *//**\n * Checks whether or not a given reference is a write reference.\n *\n * @param {escope.Reference} reference - A reference to check.\n * @returns {boolean} `true` if the reference is a write reference.\n */function isWriteReference(reference){if(reference.init){var def=reference.resolved&&reference.resolved.defs[0];if(!def||def.type!==\"Variable\"||def.parent.kind!==\"var\"){return false;}}return reference.isWrite();}/**\n * Checks whether or not a given loop condition info does not have the modified\n * flag.\n *\n * @param {LoopConditionInfo} condition - A loop condition info to check.\n * @returns {boolean} `true` if the loop condition info is \"unmodified\".\n */function isUnmodified(condition){return!condition.modified;}/**\n * Checks whether or not a given loop condition info does not have the modified\n * flag and does not have the group this condition belongs to.\n *\n * @param {LoopConditionInfo} condition - A loop condition info to check.\n * @returns {boolean} `true` if the loop condition info is \"unmodified\".\n */function isUnmodifiedAndNotBelongToGroup(condition){return!(condition.modified||condition.group);}/**\n * Checks whether or not a given reference is inside of a given node.\n *\n * @param {ASTNode} node - A node to check.\n * @param {escope.Reference} reference - A reference to check.\n * @returns {boolean} `true` if the reference is inside of the node.\n */function isInRange(node,reference){var or=node.range;var ir=reference.identifier.range;return or[0]<=ir[0]&&ir[1]<=or[1];}/**\n * Checks whether or not a given reference is inside of a loop node's condition.\n *\n * @param {ASTNode} node - A node to check.\n * @param {escope.Reference} reference - A reference to check.\n * @returns {boolean} `true` if the reference is inside of the loop node's\n *      condition.\n */var isInLoop={WhileStatement:isInRange,DoWhileStatement:isInRange,ForStatement:function ForStatement(node,reference){return isInRange(node,reference)&&!(node.init&&isInRange(node.init,reference));}};/**\n * Checks whether or not a given group node has any dynamic elements.\n *\n * @param {ASTNode} root - A node to check.\n *      This node is one of BinaryExpression or ConditionalExpression.\n * @returns {boolean} `true` if the node is dynamic.\n */function hasDynamicExpressions(root){var retv=false;var traverser=new Traverser();traverser.traverse(root,{enter:function enter(node){if(DYNAMIC_PATTERN.test(node.type)){retv=true;this.break();}else if(SKIP_PATTERN.test(node.type)){this.skip();}}});return retv;}/**\n * Creates the loop condition information from a given reference.\n *\n * @param {escope.Reference} reference - A reference to create.\n * @returns {LoopConditionInfo|null} Created loop condition info, or null.\n */function toLoopCondition(reference){if(reference.init){return null;}var group=null;var child=reference.identifier;var node=child.parent;while(node){if(SENTINEL_PATTERN.test(node.type)){if(LOOP_PATTERN.test(node.type)&&node.test===child){// This reference is inside of a loop condition.\nreturn{reference:reference,group:group,isInLoop:isInLoop[node.type].bind(null,node),modified:false};}// This reference is outside of a loop condition.\nbreak;}/*\n         * If it's inside of a group, OK if either operand is modified.\n         * So stores the group this reference belongs to.\n         */if(GROUP_PATTERN.test(node.type)){// If this expression is dynamic, no need to check.\nif(hasDynamicExpressions(node)){break;}else{group=node;}}child=node;node=node.parent;}return null;}/**\n * Gets the function which encloses a given reference.\n * This supports only FunctionDeclaration.\n *\n * @param {escope.Reference} reference - A reference to get.\n * @returns {ASTNode|null} The function node or null.\n */function getEncloseFunctionDeclaration(reference){var node=reference.identifier;while(node){if(node.type===\"FunctionDeclaration\"){return node.id?node:null;}node=node.parent;}return null;}/**\n * Updates the \"modified\" flags of given loop conditions with given modifiers.\n *\n * @param {LoopConditionInfo[]} conditions - The loop conditions to be updated.\n * @param {escope.Reference[]} modifiers - The references to update.\n * @returns {void}\n */function updateModifiedFlag(conditions,modifiers){var funcNode=void 0,funcVar=void 0;for(var i=0;i<conditions.length;++i){var condition=conditions[i];for(var j=0;!condition.modified&&j<modifiers.length;++j){var modifier=modifiers[j];/*\n             * Besides checking for the condition being in the loop, we want to\n             * check the function that this modifier is belonging to is called\n             * in the loop.\n             * FIXME: This should probably be extracted to a function.\n             */var inLoop=condition.isInLoop(modifier)||Boolean((funcNode=getEncloseFunctionDeclaration(modifier))&&(funcVar=astUtils.getVariableByName(modifier.from.upper,funcNode.id.name))&&funcVar.references.some(condition.isInLoop));condition.modified=inLoop;}}}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unmodified loop conditions\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var groupMap=null;/**\n         * Reports a given condition info.\n         *\n         * @param {LoopConditionInfo} condition - A loop condition info to report.\n         * @returns {void}\n         */function report(condition){var node=condition.reference.identifier;context.report({node:node,message:\"'{{name}}' is not modified in this loop.\",data:node});}/**\n         * Registers given conditions to the group the condition belongs to.\n         *\n         * @param {LoopConditionInfo[]} conditions - A loop condition info to\n         *      register.\n         * @returns {void}\n         */function registerConditionsToGroup(conditions){for(var i=0;i<conditions.length;++i){var condition=conditions[i];if(condition.group){var group=groupMap.get(condition.group);if(!group){group=[];groupMap.set(condition.group,group);}group.push(condition);}}}/**\n         * Reports references which are inside of unmodified groups.\n         *\n         * @param {LoopConditionInfo[]} conditions - A loop condition info to report.\n         * @returns {void}\n         */function checkConditionsInGroup(conditions){if(conditions.every(isUnmodified)){conditions.forEach(report);}}/**\n         * Finds unmodified references which are inside of a loop condition.\n         * Then reports the references which are outside of groups.\n         *\n         * @param {escope.Variable} variable - A variable to report.\n         * @returns {void}\n         */function checkReferences(variable){// Gets references that exist in loop conditions.\nvar conditions=variable.references.map(toLoopCondition).filter(Boolean);if(conditions.length===0){return;}// Registers the conditions to belonging groups.\nregisterConditionsToGroup(conditions);// Check the conditions are modified.\nvar modifiers=variable.references.filter(isWriteReference);if(modifiers.length>0){updateModifiedFlag(conditions,modifiers);}/*\n             * Reports the conditions which are not belonging to groups.\n             * Others will be reported after all variables are done.\n             */conditions.filter(isUnmodifiedAndNotBelongToGroup).forEach(report);}return{\"Program:exit\":function ProgramExit(){var queue=[context.getScope()];groupMap=new _map4.default();var scope=void 0;while(scope=queue.pop()){pushAll(queue,scope.childScopes);scope.variables.forEach(checkReferences);}groupMap.forEach(checkConditionsInGroup);groupMap=null;}};}};},{\"../ast-utils\":605,\"../util/traverser\":885}],794:[function(require,module,exports){/**\n * @fileoverview Rule to flag no-unneeded-ternary\n * @author Gyandeep Singh\n */\"use strict\";var astUtils=require(\"../ast-utils\");// Operators that always result in a boolean value\nvar BOOLEAN_OPERATORS=new _set3.default([\"==\",\"===\",\"!=\",\"!==\",\">\",\">=\",\"<\",\"<=\",\"in\",\"instanceof\"]);var OPERATOR_INVERSES={\"==\":\"!=\",\"!=\":\"==\",\"===\":\"!==\",\"!==\":\"===\"// Operators like < and >= are not true inverses, since both will return false with NaN.\n};//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow ternary operators when simpler alternatives exist\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{defaultAssignment:{type:\"boolean\"}},additionalProperties:false}],fixable:\"code\"},create:function create(context){var options=context.options[0]||{};var defaultAssignment=options.defaultAssignment!==false;var sourceCode=context.getSourceCode();/**\n         * Test if the node is a boolean literal\n         * @param {ASTNode} node - The node to report.\n         * @returns {boolean} True if the its a boolean literal\n         * @private\n         */function isBooleanLiteral(node){return node.type===\"Literal\"&&typeof node.value===\"boolean\";}/**\n         * Creates an expression that represents the boolean inverse of the expression represented by the original node\n         * @param {ASTNode} node A node representing an expression\n         * @returns {string} A string representing an inverted expression\n         */function invertExpression(node){if(node.type===\"BinaryExpression\"&&Object.prototype.hasOwnProperty.call(OPERATOR_INVERSES,node.operator)){var operatorToken=sourceCode.getFirstTokenBetween(node.left,node.right,function(token){return token.value===node.operator;});return sourceCode.getText().slice(node.range[0],operatorToken.range[0])+OPERATOR_INVERSES[node.operator]+sourceCode.getText().slice(operatorToken.range[1],node.range[1]);}if(astUtils.getPrecedence(node)<astUtils.getPrecedence({type:\"UnaryExpression\"})){return\"!(\"+astUtils.getParenthesisedText(sourceCode,node)+\")\";}return\"!\"+astUtils.getParenthesisedText(sourceCode,node);}/**\n         * Tests if a given node always evaluates to a boolean value\n         * @param {ASTNode} node - An expression node\n         * @returns {boolean} True if it is determined that the node will always evaluate to a boolean value\n         */function isBooleanExpression(node){return node.type===\"BinaryExpression\"&&BOOLEAN_OPERATORS.has(node.operator)||node.type===\"UnaryExpression\"&&node.operator===\"!\";}/**\n         * Test if the node matches the pattern id ? id : expression\n         * @param {ASTNode} node - The ConditionalExpression to check.\n         * @returns {boolean} True if the pattern is matched, and false otherwise\n         * @private\n         */function matchesDefaultAssignment(node){return node.test.type===\"Identifier\"&&node.consequent.type===\"Identifier\"&&node.test.name===node.consequent.name;}return{ConditionalExpression:function ConditionalExpression(node){if(isBooleanLiteral(node.alternate)&&isBooleanLiteral(node.consequent)){context.report({node:node,loc:node.consequent.loc.start,message:\"Unnecessary use of boolean literals in conditional expression.\",fix:function fix(fixer){if(node.consequent.value===node.alternate.value){// Replace `foo ? true : true` with just `true`, but don't replace `foo() ? true : true`\nreturn node.test.type===\"Identifier\"?fixer.replaceText(node,node.consequent.value.toString()):null;}if(node.alternate.value){// Replace `foo() ? false : true` with `!(foo())`\nreturn fixer.replaceText(node,invertExpression(node.test));}// Replace `foo ? true : false` with `foo` if `foo` is guaranteed to be a boolean, or `!!foo` otherwise.\nreturn fixer.replaceText(node,isBooleanExpression(node.test)?astUtils.getParenthesisedText(sourceCode,node.test):\"!\"+invertExpression(node.test));}});}else if(!defaultAssignment&&matchesDefaultAssignment(node)){context.report({node:node,loc:node.consequent.loc.start,message:\"Unnecessary use of conditional expression for default assignment.\",fix:function fix(fixer){return fixer.replaceText(node,astUtils.getParenthesisedText(sourceCode,node.test)+\" || \"+astUtils.getParenthesisedText(sourceCode,node.alternate));}});}}};}};},{\"../ast-utils\":605}],795:[function(require,module,exports){/**\n * @fileoverview Checks for unreachable code due to return, throws, break, and continue.\n * @author Joel Feenstra\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given variable declarator has the initializer.\n * @param {ASTNode} node - A VariableDeclarator node to check.\n * @returns {boolean} `true` if the node has the initializer.\n */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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function isInitialized(node){return Boolean(node.init);}/**\n * Checks whether or not a given code path segment is unreachable.\n * @param {CodePathSegment} segment - A CodePathSegment to check.\n * @returns {boolean} `true` if the segment is unreachable.\n */function isUnreachable(segment){return!segment.reachable;}/**\n * The class to distinguish consecutive unreachable statements.\n */var ConsecutiveRange=function(){function ConsecutiveRange(sourceCode){_classCallCheck(this,ConsecutiveRange);this.sourceCode=sourceCode;this.startNode=null;this.endNode=null;}/**\n     * The location object of this range.\n     * @type {Object}\n     */_createClass(ConsecutiveRange,[{key:\"contains\",/**\n         * Checks whether the given node is inside of this range.\n         * @param {ASTNode|Token} node - The node to check.\n         * @returns {boolean} `true` if the node is inside of this range.\n         */value:function contains(node){return node.range[0]>=this.startNode.range[0]&&node.range[1]<=this.endNode.range[1];}/**\n         * Checks whether the given node is consecutive to this range.\n         * @param {ASTNode} node - The node to check.\n         * @returns {boolean} `true` if the node is consecutive to this range.\n         */},{key:\"isConsecutive\",value:function isConsecutive(node){return this.contains(this.sourceCode.getTokenBefore(node));}/**\n         * Merges the given node to this range.\n         * @param {ASTNode} node - The node to merge.\n         * @returns {void}\n         */},{key:\"merge\",value:function merge(node){this.endNode=node;}/**\n         * Resets this range by the given node or null.\n         * @param {ASTNode|null} node - The node to reset, or null.\n         * @returns {void}\n         */},{key:\"reset\",value:function reset(node){this.startNode=this.endNode=node;}},{key:\"location\",get:function get(){return{start:this.startNode.loc.start,end:this.endNode.loc.end};}/**\n         * `true` if this range is empty.\n         * @type {boolean}\n         */},{key:\"isEmpty\",get:function get(){return!(this.startNode&&this.endNode);}}]);return ConsecutiveRange;}();//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unreachable code after `return`, `throw`, `continue`, and `break` statements\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){var currentCodePath=null;var range=new ConsecutiveRange(context.getSourceCode());/**\n         * Reports a given node if it's unreachable.\n         * @param {ASTNode} node - A statement node to report.\n         * @returns {void}\n         */function reportIfUnreachable(node){var nextNode=null;if(node&&currentCodePath.currentSegments.every(isUnreachable)){// Store this statement to distinguish consecutive statements.\nif(range.isEmpty){range.reset(node);return;}// Skip if this statement is inside of the current range.\nif(range.contains(node)){return;}// Merge if this statement is consecutive to the current range.\nif(range.isConsecutive(node)){range.merge(node);return;}nextNode=node;}// Report the current range since this statement is reachable or is\n// not consecutive to the current range.\nif(!range.isEmpty){context.report({message:\"Unreachable code.\",loc:range.location,node:range.startNode});}// Update the current range.\nrange.reset(nextNode);}return{// Manages the current code path.\nonCodePathStart:function onCodePathStart(codePath){currentCodePath=codePath;},onCodePathEnd:function onCodePathEnd(){currentCodePath=currentCodePath.upper;},// Registers for all statement nodes (excludes FunctionDeclaration).\nBlockStatement:reportIfUnreachable,BreakStatement:reportIfUnreachable,ClassDeclaration:reportIfUnreachable,ContinueStatement:reportIfUnreachable,DebuggerStatement:reportIfUnreachable,DoWhileStatement:reportIfUnreachable,EmptyStatement:reportIfUnreachable,ExpressionStatement:reportIfUnreachable,ForInStatement:reportIfUnreachable,ForOfStatement:reportIfUnreachable,ForStatement:reportIfUnreachable,IfStatement:reportIfUnreachable,ImportDeclaration:reportIfUnreachable,LabeledStatement:reportIfUnreachable,ReturnStatement:reportIfUnreachable,SwitchStatement:reportIfUnreachable,ThrowStatement:reportIfUnreachable,TryStatement:reportIfUnreachable,VariableDeclaration:function VariableDeclaration(node){if(node.kind!==\"var\"||node.declarations.some(isInitialized)){reportIfUnreachable(node);}},WhileStatement:reportIfUnreachable,WithStatement:reportIfUnreachable,ExportNamedDeclaration:reportIfUnreachable,ExportDefaultDeclaration:reportIfUnreachable,ExportAllDeclaration:reportIfUnreachable,\"Program:exit\":function ProgramExit(){reportIfUnreachable();}};}};},{}],796:[function(require,module,exports){/**\n * @fileoverview Rule to flag unsafe statements in finally block\n * @author Onur Temizkan\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar SENTINEL_NODE_TYPE_RETURN_THROW=/^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression)$/;var SENTINEL_NODE_TYPE_BREAK=/^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|DoWhileStatement|WhileStatement|ForOfStatement|ForInStatement|ForStatement|SwitchStatement)$/;var SENTINEL_NODE_TYPE_CONTINUE=/^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|DoWhileStatement|WhileStatement|ForOfStatement|ForInStatement|ForStatement)$/;//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow control flow statements in `finally` blocks\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){/**\n         * Checks if the node is the finalizer of a TryStatement\n         *\n         * @param {ASTNode} node - node to check.\n         * @returns {boolean} - true if the node is the finalizer of a TryStatement\n         */function isFinallyBlock(node){return node.parent.type===\"TryStatement\"&&node.parent.finalizer===node;}/**\n         * Climbs up the tree if the node is not a sentinel node\n         *\n         * @param {ASTNode} node - node to check.\n         * @param {string} label - label of the break or continue statement\n         * @returns {boolean} - return whether the node is a finally block or a sentinel node\n         */function isInFinallyBlock(node,label){var labelInside=false;var sentinelNodeType=void 0;if(node.type===\"BreakStatement\"&&!node.label){sentinelNodeType=SENTINEL_NODE_TYPE_BREAK;}else if(node.type===\"ContinueStatement\"){sentinelNodeType=SENTINEL_NODE_TYPE_CONTINUE;}else{sentinelNodeType=SENTINEL_NODE_TYPE_RETURN_THROW;}while(node&&!sentinelNodeType.test(node.type)){if(node.parent.label&&label&&node.parent.label.name===label.name){labelInside=true;}if(isFinallyBlock(node)){if(label&&labelInside){return false;}return true;}node=node.parent;}return false;}/**\n         * Checks whether the possibly-unsafe statement is inside a finally block.\n         *\n         * @param {ASTNode} node - node to check.\n         * @returns {void}\n         */function check(node){if(isInFinallyBlock(node,node.label)){context.report({message:\"Unsafe usage of {{nodeType}}.\",data:{nodeType:node.type},node:node,line:node.loc.line,column:node.loc.column});}}return{ReturnStatement:check,ThrowStatement:check,BreakStatement:check,ContinueStatement:check};}};},{}],797:[function(require,module,exports){/**\n * @fileoverview Rule to disallow negating the left operand of relational operators\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether the given operator is a relational operator or not.\n *\n * @param {string} op - The operator type to check.\n * @returns {boolean} `true` if the operator is a relational operator.\n */function isRelationalOperator(op){return op===\"in\"||op===\"instanceof\";}/**\n * Checks whether the given node is a logical negation expression or not.\n *\n * @param {ASTNode} node - The node to check.\n * @returns {boolean} `true` if the node is a logical negation expression.\n */function isNegation(node){return node.type===\"UnaryExpression\"&&node.operator===\"!\";}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow negating the left operand of relational operators\",category:\"Possible Errors\",recommended:true},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();return{BinaryExpression:function BinaryExpression(node){if(isRelationalOperator(node.operator)&&isNegation(node.left)&&!astUtils.isParenthesised(sourceCode,node.left)){context.report({node:node,loc:node.left.loc,message:\"Unexpected negating the left operand of '{{operator}}' operator.\",data:node,fix:function fix(fixer){var negationToken=sourceCode.getFirstToken(node.left);var fixRange=[negationToken.range[1],node.range[1]];var text=sourceCode.text.slice(fixRange[0],fixRange[1]);return fixer.replaceTextRange(fixRange,\"(\"+text+\")\");}});}}};}};},{\"../ast-utils\":605}],798:[function(require,module,exports){/**\n * @fileoverview Flag expressions in statement position that do not side effect\n * @author Michael Ficarra\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unused expressions\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{allowShortCircuit:{type:\"boolean\"},allowTernary:{type:\"boolean\"},allowTaggedTemplates:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var config=context.options[0]||{},allowShortCircuit=config.allowShortCircuit||false,allowTernary=config.allowTernary||false,allowTaggedTemplates=config.allowTaggedTemplates||false;/**\n         * @param {ASTNode} node - any node\n         * @returns {boolean} whether the given node structurally represents a directive\n         */function looksLikeDirective(node){return node.type===\"ExpressionStatement\"&&node.expression.type===\"Literal\"&&typeof node.expression.value===\"string\";}/**\n         * @param {Function} predicate - ([a] -> Boolean) the function used to make the determination\n         * @param {a[]} list - the input list\n         * @returns {a[]} the leading sequence of members in the given list that pass the given predicate\n         */function takeWhile(predicate,list){for(var i=0;i<list.length;++i){if(!predicate(list[i])){return list.slice(0,i);}}return list.slice();}/**\n         * @param {ASTNode} node - a Program or BlockStatement node\n         * @returns {ASTNode[]} the leading sequence of directive nodes in the given node's body\n         */function directives(node){return takeWhile(looksLikeDirective,node.body);}/**\n         * @param {ASTNode} node - any node\n         * @param {ASTNode[]} ancestors - the given node's ancestors\n         * @returns {boolean} whether the given node is considered a directive in its current position\n         */function isDirective(node,ancestors){var parent=ancestors[ancestors.length-1],grandparent=ancestors[ancestors.length-2];return(parent.type===\"Program\"||parent.type===\"BlockStatement\"&&/Function/.test(grandparent.type))&&directives(parent).indexOf(node)>=0;}/**\n         * Determines whether or not a given node is a valid expression. Recurses on short circuit eval and ternary nodes if enabled by flags.\n         * @param {ASTNode} node - any node\n         * @returns {boolean} whether the given node is a valid expression\n         */function isValidExpression(node){if(allowTernary){// Recursive check for ternary and logical expressions\nif(node.type===\"ConditionalExpression\"){return isValidExpression(node.consequent)&&isValidExpression(node.alternate);}}if(allowShortCircuit){if(node.type===\"LogicalExpression\"){return isValidExpression(node.right);}}if(allowTaggedTemplates&&node.type===\"TaggedTemplateExpression\"){return true;}return /^(?:Assignment|Call|New|Update|Yield|Await)Expression$/.test(node.type)||node.type===\"UnaryExpression\"&&[\"delete\",\"void\"].indexOf(node.operator)>=0;}return{ExpressionStatement:function ExpressionStatement(node){if(!isValidExpression(node.expression)&&!isDirective(node,context.getAncestors())){context.report({node:node,message:\"Expected an assignment or function call and instead saw an expression.\"});}}};}};},{}],799:[function(require,module,exports){/**\n * @fileoverview Rule to disallow unused labels.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unused labels\",category:\"Best Practices\",recommended:true},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();var scopeInfo=null;/**\n         * Adds a scope info to the stack.\n         *\n         * @param {ASTNode} node - A node to add. This is a LabeledStatement.\n         * @returns {void}\n         */function enterLabeledScope(node){scopeInfo={label:node.label.name,used:false,upper:scopeInfo};}/**\n         * Removes the top of the stack.\n         * At the same time, this reports the label if it's never used.\n         *\n         * @param {ASTNode} node - A node to report. This is a LabeledStatement.\n         * @returns {void}\n         */function exitLabeledScope(node){if(!scopeInfo.used){context.report({node:node.label,message:\"'{{name}}:' is defined but never used.\",data:node.label,fix:function fix(fixer){/*\n                         * Only perform a fix if there are no comments between the label and the body. This will be the case\n                         * when there is exactly one token/comment (the \":\") between the label and the body.\n                         */if(sourceCode.getTokenAfter(node.label,{includeComments:true})===sourceCode.getTokenBefore(node.body,{includeComments:true})){return fixer.removeRange([node.range[0],node.body.range[0]]);}return null;}});}scopeInfo=scopeInfo.upper;}/**\n         * Marks the label of a given node as used.\n         *\n         * @param {ASTNode} node - A node to mark. This is a BreakStatement or\n         *      ContinueStatement.\n         * @returns {void}\n         */function markAsUsed(node){if(!node.label){return;}var label=node.label.name;var info=scopeInfo;while(info){if(info.label===label){info.used=true;break;}info=info.upper;}}return{LabeledStatement:enterLabeledScope,\"LabeledStatement:exit\":exitLabeledScope,BreakStatement:markAsUsed,ContinueStatement:markAsUsed};}};},{}],800:[function(require,module,exports){/**\n * @fileoverview Rule to flag declared but unused variables\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unused variables\",category:\"Variables\",recommended:true},schema:[{oneOf:[{enum:[\"all\",\"local\"]},{type:\"object\",properties:{vars:{enum:[\"all\",\"local\"]},varsIgnorePattern:{type:\"string\"},args:{enum:[\"all\",\"after-used\",\"none\"]},ignoreRestSiblings:{type:\"boolean\"},argsIgnorePattern:{type:\"string\"},caughtErrors:{enum:[\"all\",\"none\"]},caughtErrorsIgnorePattern:{type:\"string\"}}}]}]},create:function create(context){var sourceCode=context.getSourceCode();var DEFINED_MESSAGE=\"'{{name}}' is defined but never used.\";var ASSIGNED_MESSAGE=\"'{{name}}' is assigned a value but never used.\";var REST_PROPERTY_TYPE=/^(?:Experimental)?RestProperty$/;var config={vars:\"all\",args:\"after-used\",ignoreRestSiblings:false,caughtErrors:\"none\"};var firstOption=context.options[0];if(firstOption){if(typeof firstOption===\"string\"){config.vars=firstOption;}else{config.vars=firstOption.vars||config.vars;config.args=firstOption.args||config.args;config.ignoreRestSiblings=firstOption.ignoreRestSiblings||config.ignoreRestSiblings;config.caughtErrors=firstOption.caughtErrors||config.caughtErrors;if(firstOption.varsIgnorePattern){config.varsIgnorePattern=new RegExp(firstOption.varsIgnorePattern);}if(firstOption.argsIgnorePattern){config.argsIgnorePattern=new RegExp(firstOption.argsIgnorePattern);}if(firstOption.caughtErrorsIgnorePattern){config.caughtErrorsIgnorePattern=new RegExp(firstOption.caughtErrorsIgnorePattern);}}}//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar STATEMENT_TYPE=/(?:Statement|Declaration)$/;/**\n         * Determines if a given variable is being exported from a module.\n         * @param {Variable} variable - EScope variable object.\n         * @returns {boolean} True if the variable is exported, false if not.\n         * @private\n         */function isExported(variable){var definition=variable.defs[0];if(definition){var node=definition.node;if(node.type===\"VariableDeclarator\"){node=node.parent;}else if(definition.type===\"Parameter\"){return false;}return node.parent.type.indexOf(\"Export\")===0;}return false;}/**\n         * Determines if a variable has a sibling rest property\n         * @param {Variable} variable - EScope variable object.\n         * @returns {boolean} True if the variable is exported, false if not.\n         * @private\n         */function hasRestSpreadSibling(variable){if(config.ignoreRestSiblings){return variable.defs.some(function(def){var propertyNode=def.name.parent;var patternNode=propertyNode.parent;return propertyNode.type===\"Property\"&&patternNode.type===\"ObjectPattern\"&&REST_PROPERTY_TYPE.test(patternNode.properties[patternNode.properties.length-1].type);});}return false;}/**\n         * Determines if a reference is a read operation.\n         * @param {Reference} ref - An escope Reference\n         * @returns {boolean} whether the given reference represents a read operation\n         * @private\n         */function isReadRef(ref){return ref.isRead();}/**\n         * Determine if an identifier is referencing an enclosing function name.\n         * @param {Reference} ref - The reference to check.\n         * @param {ASTNode[]} nodes - The candidate function nodes.\n         * @returns {boolean} True if it's a self-reference, false if not.\n         * @private\n         */function isSelfReference(ref,nodes){var scope=ref.from;while(scope){if(nodes.indexOf(scope.block)>=0){return true;}scope=scope.upper;}return false;}/**\n         * Checks the position of given nodes.\n         *\n         * @param {ASTNode} inner - A node which is expected as inside.\n         * @param {ASTNode} outer - A node which is expected as outside.\n         * @returns {boolean} `true` if the `inner` node exists in the `outer` node.\n         * @private\n         */function isInside(inner,outer){return inner.range[0]>=outer.range[0]&&inner.range[1]<=outer.range[1];}/**\n         * If a given reference is left-hand side of an assignment, this gets\n         * the right-hand side node of the assignment.\n         *\n         * In the following cases, this returns null.\n         *\n         * - The reference is not the LHS of an assignment expression.\n         * - The reference is inside of a loop.\n         * - The reference is inside of a function scope which is different from\n         *   the declaration.\n         *\n         * @param {escope.Reference} ref - A reference to check.\n         * @param {ASTNode} prevRhsNode - The previous RHS node.\n         * @returns {ASTNode|null} The RHS node or null.\n         * @private\n         */function getRhsNode(ref,prevRhsNode){var id=ref.identifier;var parent=id.parent;var granpa=parent.parent;var refScope=ref.from.variableScope;var varScope=ref.resolved.scope.variableScope;var canBeUsedLater=refScope!==varScope||astUtils.isInLoop(id);/*\n             * Inherits the previous node if this reference is in the node.\n             * This is for `a = a + a`-like code.\n             */if(prevRhsNode&&isInside(id,prevRhsNode)){return prevRhsNode;}if(parent.type===\"AssignmentExpression\"&&granpa.type===\"ExpressionStatement\"&&id===parent.left&&!canBeUsedLater){return parent.right;}return null;}/**\n         * Checks whether a given function node is stored to somewhere or not.\n         * If the function node is stored, the function can be used later.\n         *\n         * @param {ASTNode} funcNode - A function node to check.\n         * @param {ASTNode} rhsNode - The RHS node of the previous assignment.\n         * @returns {boolean} `true` if under the following conditions:\n         *      - the funcNode is assigned to a variable.\n         *      - the funcNode is bound as an argument of a function call.\n         *      - the function is bound to a property and the object satisfies above conditions.\n         * @private\n         */function isStorableFunction(funcNode,rhsNode){var node=funcNode;var parent=funcNode.parent;while(parent&&isInside(parent,rhsNode)){switch(parent.type){case\"SequenceExpression\":if(parent.expressions[parent.expressions.length-1]!==node){return false;}break;case\"CallExpression\":case\"NewExpression\":return parent.callee!==node;case\"AssignmentExpression\":case\"TaggedTemplateExpression\":case\"YieldExpression\":return true;default:if(STATEMENT_TYPE.test(parent.type)){/*\n                             * If it encountered statements, this is a complex pattern.\n                             * Since analyzeing complex patterns is hard, this returns `true` to avoid false positive.\n                             */return true;}}node=parent;parent=parent.parent;}return false;}/**\n         * Checks whether a given Identifier node exists inside of a function node which can be used later.\n         *\n         * \"can be used later\" means:\n         * - the function is assigned to a variable.\n         * - the function is bound to a property and the object can be used later.\n         * - the function is bound as an argument of a function call.\n         *\n         * If a reference exists in a function which can be used later, the reference is read when the function is called.\n         *\n         * @param {ASTNode} id - An Identifier node to check.\n         * @param {ASTNode} rhsNode - The RHS node of the previous assignment.\n         * @returns {boolean} `true` if the `id` node exists inside of a function node which can be used later.\n         * @private\n         */function isInsideOfStorableFunction(id,rhsNode){var funcNode=astUtils.getUpperFunction(id);return funcNode&&isInside(funcNode,rhsNode)&&isStorableFunction(funcNode,rhsNode);}/**\n         * Checks whether a given reference is a read to update itself or not.\n         *\n         * @param {escope.Reference} ref - A reference to check.\n         * @param {ASTNode} rhsNode - The RHS node of the previous assignment.\n         * @returns {boolean} The reference is a read to update itself.\n         * @private\n         */function isReadForItself(ref,rhsNode){var id=ref.identifier;var parent=id.parent;var granpa=parent.parent;return ref.isRead()&&(// self update. e.g. `a += 1`, `a++`\nparent.type===\"AssignmentExpression\"&&granpa.type===\"ExpressionStatement\"&&parent.left===id||parent.type===\"UpdateExpression\"&&granpa.type===\"ExpressionStatement\"||// in RHS of an assignment for itself. e.g. `a = a + 1`\nrhsNode&&isInside(id,rhsNode)&&!isInsideOfStorableFunction(id,rhsNode));}/**\n         * Determine if an identifier is used either in for-in loops.\n         *\n         * @param {Reference} ref - The reference to check.\n         * @returns {boolean} whether reference is used in the for-in loops\n         * @private\n         */function isForInRef(ref){var target=ref.identifier.parent;// \"for (var ...) { return; }\"\nif(target.type===\"VariableDeclarator\"){target=target.parent.parent;}if(target.type!==\"ForInStatement\"){return false;}// \"for (...) { return; }\"\nif(target.body.type===\"BlockStatement\"){target=target.body.body[0];// \"for (...) return;\"\n}else{target=target.body;}// For empty loop body\nif(!target){return false;}return target.type===\"ReturnStatement\";}/**\n         * Determines if the variable is used.\n         * @param {Variable} variable - The variable to check.\n         * @returns {boolean} True if the variable is used\n         * @private\n         */function isUsedVariable(variable){var functionNodes=variable.defs.filter(function(def){return def.type===\"FunctionName\";}).map(function(def){return def.node;}),isFunctionDefinition=functionNodes.length>0;var rhsNode=null;return variable.references.some(function(ref){if(isForInRef(ref)){return true;}var forItself=isReadForItself(ref,rhsNode);rhsNode=getRhsNode(ref,rhsNode);return isReadRef(ref)&&!forItself&&!(isFunctionDefinition&&isSelfReference(ref,functionNodes));});}/**\n         * Checks whether the given variable is the last parameter in the non-ignored parameters.\n         *\n         * @param {escope.Variable} variable - The variable to check.\n         * @returns {boolean} `true` if the variable is the last.\n         */function isLastInNonIgnoredParameters(variable){var def=variable.defs[0];// This is the last.\nif(def.index===def.node.params.length-1){return true;}// if all parameters preceded by this variable are ignored and unused, this is the last.\nif(config.argsIgnorePattern){var params=context.getDeclaredVariables(def.node);var posteriorParams=params.slice(params.indexOf(variable)+1);if(posteriorParams.every(function(v){return v.references.length===0&&config.argsIgnorePattern.test(v.name);})){return true;}}return false;}/**\n         * Gets an array of variables without read references.\n         * @param {Scope} scope - an escope Scope object.\n         * @param {Variable[]} unusedVars - an array that saving result.\n         * @returns {Variable[]} unused variables of the scope and descendant scopes.\n         * @private\n         */function collectUnusedVariables(scope,unusedVars){var variables=scope.variables;var childScopes=scope.childScopes;var i=void 0,l=void 0;if(scope.type!==\"TDZ\"&&(scope.type!==\"global\"||config.vars===\"all\")){for(i=0,l=variables.length;i<l;++i){var variable=variables[i];// skip a variable of class itself name in the class scope\nif(scope.type===\"class\"&&scope.block.id===variable.identifiers[0]){continue;}// skip function expression names and variables marked with markVariableAsUsed()\nif(scope.functionExpressionScope||variable.eslintUsed){continue;}// skip implicit \"arguments\" variable\nif(scope.type===\"function\"&&variable.name===\"arguments\"&&variable.identifiers.length===0){continue;}// explicit global variables don't have definitions.\nvar def=variable.defs[0];if(def){var type=def.type;// skip catch variables\nif(type===\"CatchClause\"){if(config.caughtErrors===\"none\"){continue;}// skip ignored parameters\nif(config.caughtErrorsIgnorePattern&&config.caughtErrorsIgnorePattern.test(def.name.name)){continue;}}if(type===\"Parameter\"){// skip any setter argument\nif((def.node.parent.type===\"Property\"||def.node.parent.type===\"MethodDefinition\")&&def.node.parent.kind===\"set\"){continue;}// if \"args\" option is \"none\", skip any parameter\nif(config.args===\"none\"){continue;}// skip ignored parameters\nif(config.argsIgnorePattern&&config.argsIgnorePattern.test(def.name.name)){continue;}// if \"args\" option is \"after-used\", skip all but the last parameter\nif(config.args===\"after-used\"&&!isLastInNonIgnoredParameters(variable)){continue;}}else{// skip ignored variables\nif(config.varsIgnorePattern&&config.varsIgnorePattern.test(def.name.name)){continue;}}}if(!isUsedVariable(variable)&&!isExported(variable)&&!hasRestSpreadSibling(variable)){unusedVars.push(variable);}}}for(i=0,l=childScopes.length;i<l;++i){collectUnusedVariables(childScopes[i],unusedVars);}return unusedVars;}/**\n         * Gets the index of a given variable name in a given comment.\n         * @param {escope.Variable} variable - A variable to get.\n         * @param {ASTNode} comment - A comment node which includes the variable name.\n         * @returns {number} The index of the variable name's location.\n         * @private\n         */function getColumnInComment(variable,comment){var namePattern=new RegExp(\"[\\\\s,]\"+lodash.escapeRegExp(variable.name)+\"(?:$|[\\\\s,:])\",\"g\");// To ignore the first text \"global\".\nnamePattern.lastIndex=comment.value.indexOf(\"global\")+6;// Search a given variable name.\nvar match=namePattern.exec(comment.value);return match?match.index+1:0;}/**\n         * Creates the correct location of a given variables.\n         * The location is at its name string in a `/*global` comment.\n         *\n         * @param {escope.Variable} variable - A variable to get its location.\n         * @returns {{line: number, column: number}} The location object for the variable.\n         * @private\n         */function getLocation(variable){var comment=variable.eslintExplicitGlobalComment;return sourceCode.getLocFromIndex(comment.range[0]+2+getColumnInComment(variable,comment));}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{\"Program:exit\":function ProgramExit(programNode){var unusedVars=collectUnusedVariables(context.getScope(),[]);for(var i=0,l=unusedVars.length;i<l;++i){var unusedVar=unusedVars[i];if(unusedVar.eslintExplicitGlobal){context.report({node:programNode,loc:getLocation(unusedVar),message:DEFINED_MESSAGE,data:unusedVar});}else if(unusedVar.defs.length>0){context.report({node:unusedVar.identifiers[0],message:unusedVar.references.some(function(ref){return ref.isWrite();})?ASSIGNED_MESSAGE:DEFINED_MESSAGE,data:unusedVar});}}}};}};},{\"../ast-utils\":605,\"lodash\":566}],801:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of variables before they are defined\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var SENTINEL_TYPE=/^(?:(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|CatchClause|ImportDeclaration|ExportNamedDeclaration)$/;var FOR_IN_OF_TYPE=/^For(?:In|Of)Statement$/;/**\n * Parses a given value as options.\n *\n * @param {any} options - A value to parse.\n * @returns {Object} The parsed options.\n */function parseOptions(options){var functions=true;var classes=true;var variables=true;if(typeof options===\"string\"){functions=options!==\"nofunc\";}else if((typeof options===\"undefined\"?\"undefined\":_typeof(options))===\"object\"&&options!==null){functions=options.functions!==false;classes=options.classes!==false;variables=options.variables!==false;}return{functions:functions,classes:classes,variables:variables};}/**\n * Checks whether or not a given variable is a function declaration.\n *\n * @param {escope.Variable} variable - A variable to check.\n * @returns {boolean} `true` if the variable is a function declaration.\n */function isFunction(variable){return variable.defs[0].type===\"FunctionName\";}/**\n * Checks whether or not a given variable is a class declaration in an upper function scope.\n *\n * @param {escope.Variable} variable - A variable to check.\n * @param {escope.Reference} reference - A reference to check.\n * @returns {boolean} `true` if the variable is a class declaration.\n */function isOuterClass(variable,reference){return variable.defs[0].type===\"ClassName\"&&variable.scope.variableScope!==reference.from.variableScope;}/**\n* Checks whether or not a given variable is a variable declaration in an upper function scope.\n* @param {escope.Variable} variable - A variable to check.\n* @param {escope.Reference} reference - A reference to check.\n* @returns {boolean} `true` if the variable is a variable declaration.\n*/function isOuterVariable(variable,reference){return variable.defs[0].type===\"Variable\"&&variable.scope.variableScope!==reference.from.variableScope;}/**\n * Checks whether or not a given location is inside of the range of a given node.\n *\n * @param {ASTNode} node - An node to check.\n * @param {number} location - A location to check.\n * @returns {boolean} `true` if the location is inside of the range of the node.\n */function isInRange(node,location){return node&&node.range[0]<=location&&location<=node.range[1];}/**\n * Checks whether or not a given reference is inside of the initializers of a given variable.\n *\n * This returns `true` in the following cases:\n *\n *     var a = a\n *     var [a = a] = list\n *     var {a = a} = obj\n *     for (var a in a) {}\n *     for (var a of a) {}\n *\n * @param {Variable} variable - A variable to check.\n * @param {Reference} reference - A reference to check.\n * @returns {boolean} `true` if the reference is inside of the initializers.\n */function isInInitializer(variable,reference){if(variable.scope!==reference.from){return false;}var node=variable.identifiers[0].parent;var location=reference.identifier.range[1];while(node){if(node.type===\"VariableDeclarator\"){if(isInRange(node.init,location)){return true;}if(FOR_IN_OF_TYPE.test(node.parent.parent.type)&&isInRange(node.parent.parent.right,location)){return true;}break;}else if(node.type===\"AssignmentPattern\"){if(isInRange(node.right,location)){return true;}}else if(SENTINEL_TYPE.test(node.type)){break;}node=node.parent;}return false;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow the use of variables before they are defined\",category:\"Variables\",recommended:false},schema:[{oneOf:[{enum:[\"nofunc\"]},{type:\"object\",properties:{functions:{type:\"boolean\"},classes:{type:\"boolean\"},variables:{type:\"boolean\"}},additionalProperties:false}]}]},create:function create(context){var options=parseOptions(context.options[0]);/**\n         * Determines whether a given use-before-define case should be reported according to the options.\n         * @param {escope.Variable} variable The variable that gets used before being defined\n         * @param {escope.Reference} reference The reference to the variable\n         * @returns {boolean} `true` if the usage should be reported\n         */function isForbidden(variable,reference){if(isFunction(variable)){return options.functions;}if(isOuterClass(variable,reference)){return options.classes;}if(isOuterVariable(variable,reference)){return options.variables;}return true;}/**\n         * Finds and validates all variables in a given scope.\n         * @param {Scope} scope The scope object.\n         * @returns {void}\n         * @private\n         */function findVariablesInScope(scope){scope.references.forEach(function(reference){var variable=reference.resolved;// Skips when the reference is:\n// - initialization's.\n// - referring to an undefined variable.\n// - referring to a global environment variable (there're no identifiers).\n// - located preceded by the variable (except in initializers).\n// - allowed by options.\nif(reference.init||!variable||variable.identifiers.length===0||variable.identifiers[0].range[1]<reference.identifier.range[1]&&!isInInitializer(variable,reference)||!isForbidden(variable,reference)){return;}// Reports.\ncontext.report({node:reference.identifier,message:\"'{{name}}' was used before it was defined.\",data:reference.identifier});});}/**\n         * Validates variables inside of a node's scope.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */function findVariables(){var scope=context.getScope();findVariablesInScope(scope);}var ruleDefinition={\"Program:exit\":function ProgramExit(node){var scope=context.getScope(),ecmaFeatures=context.parserOptions.ecmaFeatures||{};findVariablesInScope(scope);// both Node.js and Modules have an extra scope\nif(ecmaFeatures.globalReturn||node.sourceType===\"module\"){findVariablesInScope(scope.childScopes[0]);}}};if(context.parserOptions.ecmaVersion>=6){ruleDefinition[\"BlockStatement:exit\"]=ruleDefinition[\"SwitchStatement:exit\"]=findVariables;ruleDefinition[\"ArrowFunctionExpression:exit\"]=function(node){if(node.body.type!==\"BlockStatement\"){findVariables(node);}};}else{ruleDefinition[\"FunctionExpression:exit\"]=ruleDefinition[\"FunctionDeclaration:exit\"]=ruleDefinition[\"ArrowFunctionExpression:exit\"]=findVariables;}return ruleDefinition;}};},{}],802:[function(require,module,exports){/**\n * @fileoverview A rule to disallow unnecessary `.call()` and `.apply()`.\n * @author Toru Nagashima\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a node is a `.call()`/`.apply()`.\n * @param {ASTNode} node - A CallExpression node to check.\n * @returns {boolean} Whether or not the node is a `.call()`/`.apply()`.\n */function isCallOrNonVariadicApply(node){return node.callee.type===\"MemberExpression\"&&node.callee.property.type===\"Identifier\"&&node.callee.computed===false&&(node.callee.property.name===\"call\"&&node.arguments.length>=1||node.callee.property.name===\"apply\"&&node.arguments.length===2&&node.arguments[1].type===\"ArrayExpression\");}/**\n * Checks whether or not the tokens of two given nodes are same.\n * @param {ASTNode} left - A node 1 to compare.\n * @param {ASTNode} right - A node 2 to compare.\n * @param {SourceCode} sourceCode - The ESLint source code object.\n * @returns {boolean} the source code for the given node.\n */function equalTokens(left,right,sourceCode){var tokensL=sourceCode.getTokens(left);var tokensR=sourceCode.getTokens(right);if(tokensL.length!==tokensR.length){return false;}for(var i=0;i<tokensL.length;++i){if(tokensL[i].type!==tokensR[i].type||tokensL[i].value!==tokensR[i].value){return false;}}return true;}/**\n * Checks whether or not `thisArg` is not changed by `.call()`/`.apply()`.\n * @param {ASTNode|null} expectedThis - The node that is the owner of the applied function.\n * @param {ASTNode} thisArg - The node that is given to the first argument of the `.call()`/`.apply()`.\n * @param {SourceCode} sourceCode - The ESLint source code object.\n * @returns {boolean} Whether or not `thisArg` is not changed by `.call()`/`.apply()`.\n */function isValidThisArg(expectedThis,thisArg,sourceCode){if(!expectedThis){return astUtils.isNullOrUndefined(thisArg);}return equalTokens(expectedThis,thisArg,sourceCode);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unnecessary calls to `.call()` and `.apply()`\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();return{CallExpression:function CallExpression(node){if(!isCallOrNonVariadicApply(node)){return;}var applied=node.callee.object;var expectedThis=applied.type===\"MemberExpression\"?applied.object:null;var thisArg=node.arguments[0];if(isValidThisArg(expectedThis,thisArg,sourceCode)){context.report({node:node,message:\"unnecessary '.{{name}}()'.\",data:{name:node.callee.property.name}});}}};}};},{\"../ast-utils\":605}],803:[function(require,module,exports){/**\n * @fileoverview Rule to disallow unnecessary computed property keys in object literals\n * @author Burak Yigit Kaya\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var astUtils=require(\"../ast-utils\");var esUtils=require(\"esutils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar MESSAGE_UNNECESSARY_COMPUTED=\"Unnecessarily computed property [{{property}}] found.\";module.exports={meta:{docs:{description:\"disallow unnecessary computed property keys in object literals\",category:\"ECMAScript 6\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();return{Property:function Property(node){if(!node.computed){return;}var key=node.key,nodeType=_typeof(key.value);if(key.type===\"Literal\"&&(nodeType===\"string\"||nodeType===\"number\")&&key.value!==\"__proto__\"){context.report({node:node,message:MESSAGE_UNNECESSARY_COMPUTED,data:{property:sourceCode.getText(key)},fix:function fix(fixer){var leftSquareBracket=sourceCode.getFirstToken(node,astUtils.isOpeningBracketToken);var rightSquareBracket=sourceCode.getFirstTokenBetween(node.key,node.value,astUtils.isClosingBracketToken);var tokensBetween=sourceCode.getTokensBetween(leftSquareBracket,rightSquareBracket,1);if(tokensBetween.slice(0,-1).some(function(token,index){return sourceCode.getText().slice(token.range[1],tokensBetween[index+1].range[0]).trim();})){// If there are comments between the brackets and the property name, don't do a fix.\nreturn null;}var tokenBeforeLeftBracket=sourceCode.getTokenBefore(leftSquareBracket);// Insert a space before the key to avoid changing identifiers, e.g. ({ get[2]() {} }) to ({ get2() {} })\nvar needsSpaceBeforeKey=tokenBeforeLeftBracket.range[1]===leftSquareBracket.range[0]&&esUtils.code.isIdentifierPartES6(tokenBeforeLeftBracket.value.slice(-1).charCodeAt(0))&&esUtils.code.isIdentifierPartES6(key.raw.charCodeAt(0));var replacementKey=(needsSpaceBeforeKey?\" \":\"\")+key.raw;return fixer.replaceTextRange([leftSquareBracket.range[0],rightSquareBracket.range[1]],replacementKey);}});}}};}};},{\"../ast-utils\":605,\"esutils\":365}],804:[function(require,module,exports){/**\n * @fileoverview disallow unncessary concatenation of template strings\n * @author Henry Zhu\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given node is a concatenation.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node is a concatenation.\n */function isConcatenation(node){return node.type===\"BinaryExpression\"&&node.operator===\"+\";}/**\n * Checks if the given token is a `+` token or not.\n * @param {Token} token - The token to check.\n * @returns {boolean} `true` if the token is a `+` token.\n */function isConcatOperatorToken(token){return token.value===\"+\"&&token.type===\"Punctuator\";}/**\n * Get's the right most node on the left side of a BinaryExpression with + operator.\n * @param {ASTNode} node - A BinaryExpression node to check.\n * @returns {ASTNode} node\n */function getLeft(node){var left=node.left;while(isConcatenation(left)){left=left.right;}return left;}/**\n * Get's the left most node on the right side of a BinaryExpression with + operator.\n * @param {ASTNode} node - A BinaryExpression node to check.\n * @returns {ASTNode} node\n */function getRight(node){var right=node.right;while(isConcatenation(right)){right=right.left;}return right;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unnecessary concatenation of literals or template literals\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();return{BinaryExpression:function BinaryExpression(node){// check if not concatenation\nif(node.operator!==\"+\"){return;}// account for the `foo + \"a\" + \"b\"` case\nvar left=getLeft(node);var right=getRight(node);if(astUtils.isStringLiteral(left)&&astUtils.isStringLiteral(right)&&astUtils.isTokenOnSameLine(left,right)){var operatorToken=sourceCode.getFirstTokenBetween(left,right,isConcatOperatorToken);context.report({node:node,loc:operatorToken.loc.start,message:\"Unexpected string concatenation of literals.\"});}}};}};},{\"../ast-utils\":605}],805:[function(require,module,exports){/**\n * @fileoverview Rule to flag the use of redundant constructors in classes.\n * @author Alberto Rodríguez\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether a given array of statements is a single call of `super`.\n *\n * @param {ASTNode[]} body - An array of statements to check.\n * @returns {boolean} `true` if the body is a single call of `super`.\n */function isSingleSuperCall(body){return body.length===1&&body[0].type===\"ExpressionStatement\"&&body[0].expression.type===\"CallExpression\"&&body[0].expression.callee.type===\"Super\";}/**\n * Checks whether a given node is a pattern which doesn't have any side effects.\n * Default parameters and Destructuring parameters can have side effects.\n *\n * @param {ASTNode} node - A pattern node.\n * @returns {boolean} `true` if the node doesn't have any side effects.\n */function isSimple(node){return node.type===\"Identifier\"||node.type===\"RestElement\";}/**\n * Checks whether a given array of expressions is `...arguments` or not.\n * `super(...arguments)` passes all arguments through.\n *\n * @param {ASTNode[]} superArgs - An array of expressions to check.\n * @returns {boolean} `true` if the superArgs is `...arguments`.\n */function isSpreadArguments(superArgs){return superArgs.length===1&&superArgs[0].type===\"SpreadElement\"&&superArgs[0].argument.type===\"Identifier\"&&superArgs[0].argument.name===\"arguments\";}/**\n * Checks whether given 2 nodes are identifiers which have the same name or not.\n *\n * @param {ASTNode} ctorParam - A node to check.\n * @param {ASTNode} superArg - A node to check.\n * @returns {boolean} `true` if the nodes are identifiers which have the same\n *      name.\n */function isValidIdentifierPair(ctorParam,superArg){return ctorParam.type===\"Identifier\"&&superArg.type===\"Identifier\"&&ctorParam.name===superArg.name;}/**\n * Checks whether given 2 nodes are a rest/spread pair which has the same values.\n *\n * @param {ASTNode} ctorParam - A node to check.\n * @param {ASTNode} superArg - A node to check.\n * @returns {boolean} `true` if the nodes are a rest/spread pair which has the\n *      same values.\n */function isValidRestSpreadPair(ctorParam,superArg){return ctorParam.type===\"RestElement\"&&superArg.type===\"SpreadElement\"&&isValidIdentifierPair(ctorParam.argument,superArg.argument);}/**\n * Checks whether given 2 nodes have the same value or not.\n *\n * @param {ASTNode} ctorParam - A node to check.\n * @param {ASTNode} superArg - A node to check.\n * @returns {boolean} `true` if the nodes have the same value or not.\n */function isValidPair(ctorParam,superArg){return isValidIdentifierPair(ctorParam,superArg)||isValidRestSpreadPair(ctorParam,superArg);}/**\n * Checks whether the parameters of a constructor and the arguments of `super()`\n * have the same values or not.\n *\n * @param {ASTNode} ctorParams - The parameters of a constructor to check.\n * @param {ASTNode} superArgs - The arguments of `super()` to check.\n * @returns {boolean} `true` if those have the same values.\n */function isPassingThrough(ctorParams,superArgs){if(ctorParams.length!==superArgs.length){return false;}for(var i=0;i<ctorParams.length;++i){if(!isValidPair(ctorParams[i],superArgs[i])){return false;}}return true;}/**\n * Checks whether the constructor body is a redundant super call.\n *\n * @param {Array} body - constructor body content.\n * @param {Array} ctorParams - The params to check against super call.\n * @returns {boolean} true if the construtor body is redundant\n */function isRedundantSuperCall(body,ctorParams){return isSingleSuperCall(body)&&ctorParams.every(isSimple)&&(isSpreadArguments(body[0].expression.arguments)||isPassingThrough(ctorParams,body[0].expression.arguments));}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow unnecessary constructors\",category:\"ECMAScript 6\",recommended:false},schema:[]},create:function create(context){/**\n         * Checks whether a node is a redundant constructor\n         * @param {ASTNode} node - node to check\n         * @returns {void}\n         */function checkForConstructor(node){if(node.kind!==\"constructor\"){return;}var body=node.value.body.body;var ctorParams=node.value.params;var superClass=node.parent.parent.superClass;if(superClass?isRedundantSuperCall(body,ctorParams):body.length===0){context.report({node:node,message:\"Useless constructor.\"});}}return{MethodDefinition:checkForConstructor};}};},{}],806:[function(require,module,exports){/**\n * @fileoverview Look for useless escapes in strings and regexes\n * @author Onur Temizkan\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n/**\n* Returns the union of two sets.\n* @param {Set} setA The first set\n* @param {Set} setB The second set\n* @returns {Set} The union of the two sets\n*/function union(setA,setB){return new _set3.default(_regenerator2.default.mark(function _callee(){return _regenerator2.default.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:return _context.delegateYield(setA,\"t0\",1);case 1:return _context.delegateYield(setB,\"t1\",2);case 2:case\"end\":return _context.stop();}}},_callee,this);})());}var VALID_STRING_ESCAPES=union(new _set3.default(\"\\\\nrvtbfux\"),astUtils.LINEBREAKS);var REGEX_GENERAL_ESCAPES=new _set3.default(\"\\\\bcdDfnrsStvwWxu0123456789]\");var REGEX_NON_CHARCLASS_ESCAPES=union(REGEX_GENERAL_ESCAPES,new _set3.default(\"^/.$*+?[{}|()B\"));/**\n* Parses a regular expression into a list of characters with character class info.\n* @param {string} regExpText The raw text used to create the regular expression\n* @returns {Object[]} A list of characters, each with info on escaping and whether they're in a character class.\n* @example\n*\n* parseRegExp('a\\\\b[cd-]')\n*\n* returns:\n* [\n*   {text: 'a', index: 0, escaped: false, inCharClass: false, startsCharClass: false, endsCharClass: false},\n*   {text: 'b', index: 2, escaped: true, inCharClass: false, startsCharClass: false, endsCharClass: false},\n*   {text: 'c', index: 4, escaped: false, inCharClass: true, startsCharClass: true, endsCharClass: false},\n*   {text: 'd', index: 5, escaped: false, inCharClass: true, startsCharClass: false, endsCharClass: false},\n*   {text: '-', index: 6, escaped: false, inCharClass: true, startsCharClass: false, endsCharClass: false}\n* ]\n*/function parseRegExp(regExpText){var charList=[];regExpText.split(\"\").reduce(function(state,char,index){if(!state.escapeNextChar){if(char===\"\\\\\"){return(0,_assign4.default)(state,{escapeNextChar:true});}if(char===\"[\"&&!state.inCharClass){return(0,_assign4.default)(state,{inCharClass:true,startingCharClass:true});}if(char===\"]\"&&state.inCharClass){if(charList.length&&charList[charList.length-1].inCharClass){charList[charList.length-1].endsCharClass=true;}return(0,_assign4.default)(state,{inCharClass:false,startingCharClass:false});}}charList.push({text:char,index:index,escaped:state.escapeNextChar,inCharClass:state.inCharClass,startsCharClass:state.startingCharClass,endsCharClass:false});return(0,_assign4.default)(state,{escapeNextChar:false,startingCharClass:false});},{escapeNextChar:false,inCharClass:false,startingCharClass:false});return charList;}module.exports={meta:{docs:{description:\"disallow unnecessary escape characters\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();/**\n         * Reports a node\n         * @param {ASTNode} node The node to report\n         * @param {number} startOffset The backslash's offset from the start of the node\n         * @param {string} character The uselessly escaped character (not including the backslash)\n         * @returns {void}\n         */function report(node,startOffset,character){context.report({node:node,loc:sourceCode.getLocFromIndex(sourceCode.getIndexFromLoc(node.loc.start)+startOffset),message:\"Unnecessary escape character: \\\\{{character}}.\",data:{character:character}});}/**\n         * Checks if the escape character in given string slice is unnecessary.\n         *\n         * @private\n         * @param {ASTNode} node - node to validate.\n         * @param {string} match - string slice to validate.\n         * @returns {void}\n         */function validateString(node,match){var isTemplateElement=node.type===\"TemplateElement\";var escapedChar=match[0][1];var isUnnecessaryEscape=!VALID_STRING_ESCAPES.has(escapedChar);var isQuoteEscape=void 0;if(isTemplateElement){isQuoteEscape=escapedChar===\"`\";if(escapedChar===\"$\"){// Warn if `\\$` is not followed by `{`\nisUnnecessaryEscape=match.input[match.index+2]!==\"{\";}else if(escapedChar===\"{\"){/* Warn if `\\{` is not preceded by `$`. If preceded by `$`, escaping\n                     * is necessary and the rule should not warn. If preceded by `/$`, the rule\n                     * will warn for the `/$` instead, as it is the first unnecessarily escaped character.\n                     */isUnnecessaryEscape=match.input[match.index-1]!==\"$\";}}else{isQuoteEscape=escapedChar===node.raw[0];}if(isUnnecessaryEscape&&!isQuoteEscape){report(node,match.index+1,match[0].slice(1));}}/**\n         * Checks if a node has an escape.\n         *\n         * @param {ASTNode} node - node to check.\n         * @returns {void}\n         */function check(node){var isTemplateElement=node.type===\"TemplateElement\";if(isTemplateElement&&node.parent&&node.parent.parent&&node.parent.parent.type===\"TaggedTemplateExpression\"&&node.parent===node.parent.parent.quasi){// Don't report tagged template literals, because the backslash character is accessible to the tag function.\nreturn;}if(typeof node.value===\"string\"||isTemplateElement){/*\n                 * JSXAttribute doesn't have any escape sequence: https://facebook.github.io/jsx/.\n                 * In addition, backticks are not supported by JSX yet: https://github.com/facebook/jsx/issues/25.\n                 */if(node.parent.type===\"JSXAttribute\"||node.parent.type===\"JSXElement\"){return;}var value=isTemplateElement?node.value.raw:node.raw.slice(1,-1);var pattern=/\\\\[^\\d]/g;var match=void 0;while(match=pattern.exec(value)){validateString(node,match);}}else if(node.regex){parseRegExp(node.regex.pattern)/*\n                 * The '-' character is a special case, because it's only valid to escape it if it's in a character\n                 * class, and is not at either edge of the character class. To account for this, don't consider '-'\n                 * characters to be valid in general, and filter out '-' characters that appear in the middle of a\n                 * character class.\n                 */.filter(function(charInfo){return!(charInfo.text===\"-\"&&charInfo.inCharClass&&!charInfo.startsCharClass&&!charInfo.endsCharClass);})/*\n                 * The '^' character is also a special case; it must always be escaped outside of character classes, but\n                 * it only needs to be escaped in character classes if it's at the beginning of the character class. To\n                 * account for this, consider it to be a valid escape character outside of character classes, and filter\n                 * out '^' characters that appear at the start of a character class.\n                 */.filter(function(charInfo){return!(charInfo.text===\"^\"&&charInfo.startsCharClass);})// Filter out characters that aren't escaped.\n.filter(function(charInfo){return charInfo.escaped;})// Filter out characters that are valid to escape, based on their position in the regular expression.\n.filter(function(charInfo){return!(charInfo.inCharClass?REGEX_GENERAL_ESCAPES:REGEX_NON_CHARCLASS_ESCAPES).has(charInfo.text);})// Report all the remaining characters.\n.forEach(function(charInfo){return report(node,charInfo.index,charInfo.text);});}}return{Literal:check,TemplateElement:check};}};},{\"../ast-utils\":605}],807:[function(require,module,exports){/**\n * @fileoverview Disallow renaming import, export, and destructured assignments to the same name.\n * @author Kai Cataldo\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow renaming import, export, and destructured assignments to the same name\",category:\"ECMAScript 6\",recommended:false},fixable:\"code\",schema:[{type:\"object\",properties:{ignoreDestructuring:{type:\"boolean\"},ignoreImport:{type:\"boolean\"},ignoreExport:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{},ignoreDestructuring=options.ignoreDestructuring===true,ignoreImport=options.ignoreImport===true,ignoreExport=options.ignoreExport===true;//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Reports error for unnecessarily renamed assignments\n         * @param {ASTNode} node - node to report\n         * @param {ASTNode} initial - node with initial name value\n         * @param {ASTNode} result - node with new name value\n         * @param {string} type - the type of the offending node\n         * @returns {void}\n         */function reportError(node,initial,result,type){var name=initial.type===\"Identifier\"?initial.name:initial.value;return context.report({node:node,message:\"{{type}} {{name}} unnecessarily renamed.\",data:{name:name,type:type},fix:function fix(fixer){return fixer.replaceTextRange([initial.range[0],result.range[1]],name);}});}/**\n         * Checks whether a destructured assignment is unnecessarily renamed\n         * @param {ASTNode} node - node to check\n         * @returns {void}\n         */function checkDestructured(node){if(ignoreDestructuring){return;}var properties=node.properties;for(var i=0;i<properties.length;i++){if(properties[i].shorthand){continue;}/**\n                 * If an ObjectPattern property is computed, we have no idea\n                 * if a rename is useless or not. If an ObjectPattern property\n                 * lacks a key, it is likely an ExperimentalRestProperty and\n                 * so there is no \"renaming\" occurring here.\n                 */if(properties[i].computed||!properties[i].key){continue;}if(properties[i].key.type===\"Identifier\"&&properties[i].key.name===properties[i].value.name||properties[i].key.type===\"Literal\"&&properties[i].key.value===properties[i].value.name){reportError(properties[i],properties[i].key,properties[i].value,\"Destructuring assignment\");}}}/**\n         * Checks whether an import is unnecessarily renamed\n         * @param {ASTNode} node - node to check\n         * @returns {void}\n         */function checkImport(node){if(ignoreImport){return;}if(node.imported.name===node.local.name&&node.imported.range[0]!==node.local.range[0]){reportError(node,node.imported,node.local,\"Import\");}}/**\n         * Checks whether an export is unnecessarily renamed\n         * @param {ASTNode} node - node to check\n         * @returns {void}\n         */function checkExport(node){if(ignoreExport){return;}if(node.local.name===node.exported.name&&node.local.range[0]!==node.exported.range[0]){reportError(node,node.local,node.exported,\"Export\");}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{ObjectPattern:checkDestructured,ImportSpecifier:checkImport,ExportSpecifier:checkExport};}};},{}],808:[function(require,module,exports){/**\n * @fileoverview Disallow redundant return statements\n * @author Teddy Katz\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\"),FixTracker=require(\"../util/fix-tracker\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Adds all elements of 2nd argument into 1st argument.\n *\n * @param {Array} array - The destination array to add.\n * @param {Array} elements - The source array to add.\n * @returns {void}\n */var pushAll=Function.apply.bind(Array.prototype.push);/**\n * Removes the given element from the array.\n *\n * @param {Array} array - The source array to remove.\n * @param {any} element - The target item to remove.\n * @returns {void}\n */function remove(array,element){var index=array.indexOf(element);if(index!==-1){array.splice(index,1);}}/**\n * Checks whether it can remove the given return statement or not.\n *\n * @param {ASTNode} node - The return statement node to check.\n * @returns {boolean} `true` if the node is removeable.\n */function isRemovable(node){return astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type);}/**\n * Checks whether the given return statement is in a `finally` block or not.\n *\n * @param {ASTNode} node - The return statement node to check.\n * @returns {boolean} `true` if the node is in a `finally` block.\n */function isInFinally(node){while(node&&node.parent&&!astUtils.isFunction(node)){if(node.parent.type===\"TryStatement\"&&node.parent.finalizer===node){return true;}node=node.parent;}return false;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow redundant return statements\",category:\"Best Practices\",recommended:false},fixable:\"code\",schema:[]},create:function create(context){var segmentInfoMap=new _weakMap4.default();var usedUnreachableSegments=new _weakSet2.default();var scopeInfo=null;/**\n         * Checks whether the given segment is terminated by a return statement or not.\n         *\n         * @param {CodePathSegment} segment - The segment to check.\n         * @returns {boolean} `true` if the segment is terminated by a return statement, or if it's still a part of unreachable.\n         */function isReturned(segment){var info=segmentInfoMap.get(segment);return!info||info.returned;}/**\n         * Collects useless return statements from the given previous segments.\n         *\n         * A previous segment may be an unreachable segment.\n         * In that case, the information object of the unreachable segment is not\n         * initialized because `onCodePathSegmentStart` event is not notified for\n         * unreachable segments.\n         * This goes to the previous segments of the unreachable segment recursively\n         * if the unreachable segment was generated by a return statement. Otherwise,\n         * this ignores the unreachable segment.\n         *\n         * This behavior would simulate code paths for the case that the return\n         * statement does not exist.\n         *\n         * @param {ASTNode[]} uselessReturns - The collected return statements.\n         * @param {CodePathSegment[]} prevSegments - The previous segments to traverse.\n         * @param {WeakSet<CodePathSegment>} [traversedSegments] A set of segments that have already been traversed in this call\n         * @returns {ASTNode[]} `uselessReturns`.\n         */function getUselessReturns(uselessReturns,prevSegments,traversedSegments){if(!traversedSegments){traversedSegments=new _weakSet2.default();}var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=(0,_getIterator5.default)(prevSegments),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var segment=_step.value;if(!segment.reachable){if(!traversedSegments.has(segment)){traversedSegments.add(segment);getUselessReturns(uselessReturns,segment.allPrevSegments.filter(isReturned),traversedSegments);}continue;}pushAll(uselessReturns,segmentInfoMap.get(segment).uselessReturns);}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}return uselessReturns;}/**\n         * Removes the return statements on the given segment from the useless return\n         * statement list.\n         *\n         * This segment may be an unreachable segment.\n         * In that case, the information object of the unreachable segment is not\n         * initialized because `onCodePathSegmentStart` event is not notified for\n         * unreachable segments.\n         * This goes to the previous segments of the unreachable segment recursively\n         * if the unreachable segment was generated by a return statement. Otherwise,\n         * this ignores the unreachable segment.\n         *\n         * This behavior would simulate code paths for the case that the return\n         * statement does not exist.\n         *\n         * @param {CodePathSegment} segment - The segment to get return statements.\n         * @returns {void}\n         */function markReturnStatementsOnSegmentAsUsed(segment){if(!segment.reachable){usedUnreachableSegments.add(segment);segment.allPrevSegments.filter(isReturned).filter(function(prevSegment){return!usedUnreachableSegments.has(prevSegment);}).forEach(markReturnStatementsOnSegmentAsUsed);return;}var info=segmentInfoMap.get(segment);var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=(0,_getIterator5.default)(info.uselessReturns),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var node=_step2.value;remove(scopeInfo.uselessReturns,node);}}catch(err){_didIteratorError2=true;_iteratorError2=err;}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return();}}finally{if(_didIteratorError2){throw _iteratorError2;}}}info.uselessReturns=[];}/**\n         * Removes the return statements on the current segments from the useless\n         * return statement list.\n         *\n         * This function will be called at every statement except FunctionDeclaration,\n         * BlockStatement, and BreakStatement.\n         *\n         * - FunctionDeclarations are always executed whether it's returned or not.\n         * - BlockStatements do nothing.\n         * - BreakStatements go the next merely.\n         *\n         * @returns {void}\n         */function markReturnStatementsOnCurrentSegmentsAsUsed(){scopeInfo.codePath.currentSegments.forEach(markReturnStatementsOnSegmentAsUsed);}//----------------------------------------------------------------------\n// Public\n//----------------------------------------------------------------------\nreturn{// Makes and pushs a new scope information.\nonCodePathStart:function onCodePathStart(codePath){scopeInfo={upper:scopeInfo,uselessReturns:[],codePath:codePath};},// Reports useless return statements if exist.\nonCodePathEnd:function onCodePathEnd(){var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{var _loop=function _loop(){var node=_step3.value;context.report({node:node,loc:node.loc,message:\"Unnecessary return statement.\",fix:function fix(fixer){if(isRemovable(node)){// Extend the replacement range to include the\n// entire function to avoid conflicting with\n// no-else-return.\n// https://github.com/eslint/eslint/issues/8026\nreturn new FixTracker(fixer,context.getSourceCode()).retainEnclosingFunction(node).remove(node);}return null;}});};for(var _iterator3=(0,_getIterator5.default)(scopeInfo.uselessReturns),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){_loop();}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3;}}}scopeInfo=scopeInfo.upper;},// Initializes segments.\n// NOTE: This event is notified for only reachable segments.\nonCodePathSegmentStart:function onCodePathSegmentStart(segment){var info={uselessReturns:getUselessReturns([],segment.allPrevSegments),returned:false};// Stores the info.\nsegmentInfoMap.set(segment,info);},// Adds ReturnStatement node to check whether it's useless or not.\nReturnStatement:function ReturnStatement(node){if(node.argument){markReturnStatementsOnCurrentSegmentsAsUsed();}if(node.argument||astUtils.isInLoop(node)||isInFinally(node)){return;}var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=(0,_getIterator5.default)(scopeInfo.codePath.currentSegments),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var segment=_step4.value;var info=segmentInfoMap.get(segment);if(info){info.uselessReturns.push(node);info.returned=true;}}}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally{if(_didIteratorError4){throw _iteratorError4;}}}scopeInfo.uselessReturns.push(node);},// Registers for all statement nodes except FunctionDeclaration, BlockStatement, BreakStatement.\n// Removes return statements of the current segments from the useless return statement list.\nClassDeclaration:markReturnStatementsOnCurrentSegmentsAsUsed,ContinueStatement:markReturnStatementsOnCurrentSegmentsAsUsed,DebuggerStatement:markReturnStatementsOnCurrentSegmentsAsUsed,DoWhileStatement:markReturnStatementsOnCurrentSegmentsAsUsed,EmptyStatement:markReturnStatementsOnCurrentSegmentsAsUsed,ExpressionStatement:markReturnStatementsOnCurrentSegmentsAsUsed,ForInStatement:markReturnStatementsOnCurrentSegmentsAsUsed,ForOfStatement:markReturnStatementsOnCurrentSegmentsAsUsed,ForStatement:markReturnStatementsOnCurrentSegmentsAsUsed,IfStatement:markReturnStatementsOnCurrentSegmentsAsUsed,ImportDeclaration:markReturnStatementsOnCurrentSegmentsAsUsed,LabeledStatement:markReturnStatementsOnCurrentSegmentsAsUsed,SwitchStatement:markReturnStatementsOnCurrentSegmentsAsUsed,ThrowStatement:markReturnStatementsOnCurrentSegmentsAsUsed,TryStatement:markReturnStatementsOnCurrentSegmentsAsUsed,VariableDeclaration:markReturnStatementsOnCurrentSegmentsAsUsed,WhileStatement:markReturnStatementsOnCurrentSegmentsAsUsed,WithStatement:markReturnStatementsOnCurrentSegmentsAsUsed,ExportNamedDeclaration:markReturnStatementsOnCurrentSegmentsAsUsed,ExportDefaultDeclaration:markReturnStatementsOnCurrentSegmentsAsUsed,ExportAllDeclaration:markReturnStatementsOnCurrentSegmentsAsUsed};}};},{\"../ast-utils\":605,\"../util/fix-tracker\":879}],809:[function(require,module,exports){/**\n * @fileoverview Rule to check for the usage of var.\n * @author Jamund Ferguson\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Finds the nearest function scope or global scope walking up the scope\n * hierarchy.\n *\n * @param {escope.Scope} scope - The scope to traverse.\n * @returns {escope.Scope} a function scope or global scope containing the given\n *      scope.\n */function getEnclosingFunctionScope(scope){while(scope.type!==\"function\"&&scope.type!==\"global\"){scope=scope.upper;}return scope;}/**\n * Checks whether the given variable has any references from a more specific\n * function expression (i.e. a closure).\n *\n * @param {escope.Variable} variable - A variable to check.\n * @returns {boolean} `true` if the variable is used from a closure.\n */function isReferencedInClosure(variable){var enclosingFunctionScope=getEnclosingFunctionScope(variable.scope);return variable.references.some(function(reference){return getEnclosingFunctionScope(reference.from)!==enclosingFunctionScope;});}/**\n * Checks whether the given node is the assignee of a loop.\n *\n * @param {ASTNode} node - A VariableDeclaration node to check.\n * @returns {boolean} `true` if the declaration is assigned as part of loop\n *      iteration.\n */function isLoopAssignee(node){return(node.parent.type===\"ForOfStatement\"||node.parent.type===\"ForInStatement\")&&node===node.parent.left;}/**\n * Checks whether the given variable declaration is immediately initialized.\n *\n * @param {ASTNode} node - A VariableDeclaration node to check.\n * @returns {boolean} `true` if the declaration has an initializer.\n */function isDeclarationInitialized(node){return node.declarations.every(function(declarator){return declarator.init!==null;});}var SCOPE_NODE_TYPE=/^(?:Program|BlockStatement|SwitchStatement|ForStatement|ForInStatement|ForOfStatement)$/;/**\n * Gets the scope node which directly contains a given node.\n *\n * @param {ASTNode} node - A node to get. This is a `VariableDeclaration` or\n *      an `Identifier`.\n * @returns {ASTNode} A scope node. This is one of `Program`, `BlockStatement`,\n *      `SwitchStatement`, `ForStatement`, `ForInStatement`, and\n *      `ForOfStatement`.\n */function getScopeNode(node){while(node){if(SCOPE_NODE_TYPE.test(node.type)){return node;}node=node.parent;}/* istanbul ignore next : unreachable */return null;}/**\n * Checks whether a given variable is redeclared or not.\n *\n * @param {escope.Variable} variable - A variable to check.\n * @returns {boolean} `true` if the variable is redeclared.\n */function isRedeclared(variable){return variable.defs.length>=2;}/**\n * Checks whether a given variable is used from outside of the specified scope.\n *\n * @param {ASTNode} scopeNode - A scope node to check.\n * @returns {Function} The predicate function which checks whether a given\n *      variable is used from outside of the specified scope.\n */function isUsedFromOutsideOf(scopeNode){/**\n     * Checks whether a given reference is inside of the specified scope or not.\n     *\n     * @param {escope.Reference} reference - A reference to check.\n     * @returns {boolean} `true` if the reference is inside of the specified\n     *      scope.\n     */function isOutsideOfScope(reference){var scope=scopeNode.range;var id=reference.identifier.range;return id[0]<scope[0]||id[1]>scope[1];}return function(variable){return variable.references.some(isOutsideOfScope);};}/**\n * Creates the predicate function which checks whether a variable has their references in TDZ.\n *\n * The predicate function would return `true`:\n *\n * - if a reference is before the declarator. E.g. (var a = b, b = 1;)(var {a = b, b} = {};)\n * - if a reference is in the expression of their default value.  E.g. (var {a = a} = {};)\n * - if a reference is in the expression of their initializer.  E.g. (var a = a;)\n *\n * @param {ASTNode} node - The initializer node of VariableDeclarator.\n * @returns {Function} The predicate function.\n * @private\n */function hasReferenceInTDZ(node){var initStart=node.range[0];var initEnd=node.range[1];return function(variable){var id=variable.defs[0].name;var idStart=id.range[0];var defaultValue=id.parent.type===\"AssignmentPattern\"?id.parent.right:null;var defaultStart=defaultValue&&defaultValue.range[0];var defaultEnd=defaultValue&&defaultValue.range[1];return variable.references.some(function(reference){var start=reference.identifier.range[0];var end=reference.identifier.range[1];return!reference.init&&(start<idStart||defaultValue!==null&&start>=defaultStart&&end<=defaultEnd||start>=initStart&&end<=initEnd);});};}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `let` or `const` instead of `var`\",category:\"ECMAScript 6\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();/**\n         * Checks whether the variables which are defined by the given declarator node have their references in TDZ.\n         *\n         * @param {ASTNode} declarator - The VariableDeclarator node to check.\n         * @returns {boolean} `true` if one of the variables which are defined by the given declarator node have their references in TDZ.\n         */function hasSelfReferenceInTDZ(declarator){if(!declarator.init){return false;}var variables=context.getDeclaredVariables(declarator);return variables.some(hasReferenceInTDZ(declarator.init));}/**\n         * Checks whether it can fix a given variable declaration or not.\n         * It cannot fix if the following cases:\n         *\n         * - A variable is declared on a SwitchCase node.\n         * - A variable is redeclared.\n         * - A variable is used from outside the scope.\n         * - A variable is used from a closure within a loop.\n         * - A variable might be used before it is assigned within a loop.\n         * - A variable might be used in TDZ.\n         * - A variable is declared in statement position (e.g. a single-line `IfStatement`)\n         *\n         * ## A variable is declared on a SwitchCase node.\n         *\n         * If this rule modifies 'var' declarations on a SwitchCase node, it\n         * would generate the warnings of 'no-case-declarations' rule. And the\n         * 'eslint:recommended' preset includes 'no-case-declarations' rule, so\n         * this rule doesn't modify those declarations.\n         *\n         * ## A variable is redeclared.\n         *\n         * The language spec disallows redeclarations of `let` declarations.\n         * Those variables would cause syntax errors.\n         *\n         * ## A variable is used from outside the scope.\n         *\n         * The language spec disallows accesses from outside of the scope for\n         * `let` declarations. Those variables would cause reference errors.\n         *\n         * ## A variable is used from a closure within a loop.\n         *\n         * A `var` declaration within a loop shares the same variable instance\n         * across all loop iterations, while a `let` declaration creates a new\n         * instance for each iteration. This means if a variable in a loop is\n         * referenced by any closure, changing it from `var` to `let` would\n         * change the behavior in a way that is generally unsafe.\n         *\n         * ## A variable might be used before it is assigned within a loop.\n         *\n         * Within a loop, a `let` declaration without an initializer will be\n         * initialized to null, while a `var` declaration will retain its value\n         * from the previous iteration, so it is only safe to change `var` to\n         * `let` if we can statically determine that the variable is always\n         * assigned a value before its first access in the loop body. To keep\n         * the implementation simple, we only convert `var` to `let` within\n         * loops when the variable is a loop assignee or the declaration has an\n         * initializer.\n         *\n         * @param {ASTNode} node - A variable declaration node to check.\n         * @returns {boolean} `true` if it can fix the node.\n         */function canFix(node){var variables=context.getDeclaredVariables(node);var scopeNode=getScopeNode(node);if(node.parent.type===\"SwitchCase\"||node.declarations.some(hasSelfReferenceInTDZ)||variables.some(isRedeclared)||variables.some(isUsedFromOutsideOf(scopeNode))){return false;}if(astUtils.isInLoop(node)){if(variables.some(isReferencedInClosure)){return false;}if(!isLoopAssignee(node)&&!isDeclarationInitialized(node)){return false;}}if(!isLoopAssignee(node)&&!(node.parent.type===\"ForStatement\"&&node.parent.init===node)&&!astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)){// If the declaration is not in a block, e.g. `if (foo) var bar = 1;`, then it can't be fixed.\nreturn false;}return true;}/**\n         * Reports a given variable declaration node.\n         *\n         * @param {ASTNode} node - A variable declaration node to report.\n         * @returns {void}\n         */function report(node){var varToken=sourceCode.getFirstToken(node);context.report({node:node,message:\"Unexpected var, use let or const instead.\",fix:function fix(fixer){if(canFix(node)){return fixer.replaceText(varToken,\"let\");}return null;}});}return{\"VariableDeclaration:exit\":function VariableDeclarationExit(node){if(node.kind===\"var\"){report(node);}}};}};},{\"../ast-utils\":605}],810:[function(require,module,exports){/**\n * @fileoverview Rule to disallow use of void operator.\n * @author Mike Sidorov\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `void` operators\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{UnaryExpression:function UnaryExpression(node){if(node.operator===\"void\"){context.report({node:node,message:\"Expected 'undefined' and instead saw 'void'.\"});}}};}};},{}],811:[function(require,module,exports){/**\n * @fileoverview Rule that warns about used warning comments\n * @author Alexander Schmidt <https://github.com/lxanders>\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow specified warning terms in comments\",category:\"Best Practices\",recommended:false},schema:[{type:\"object\",properties:{terms:{type:\"array\",items:{type:\"string\"}},location:{enum:[\"start\",\"anywhere\"]}},additionalProperties:false}]},create:function create(context){var configuration=context.options[0]||{},warningTerms=configuration.terms||[\"todo\",\"fixme\",\"xxx\"],location=configuration.location||\"start\",selfConfigRegEx=/\\bno-warning-comments\\b/;/**\n         * Convert a warning term into a RegExp which will match a comment containing that whole word in the specified\n         * location (\"start\" or \"anywhere\"). If the term starts or ends with non word characters, then the match will not\n         * require word boundaries on that side.\n         *\n         * @param {string} term A term to convert to a RegExp\n         * @returns {RegExp} The term converted to a RegExp\n         */function convertToRegExp(term){var escaped=term.replace(/[-/\\\\$^*+?.()|[\\]{}]/g,\"\\\\$&\");var prefix=void 0;/*\n             * If the term ends in a word character (a-z0-9_), ensure a word\n             * boundary at the end, so that substrings do not get falsely\n             * matched. eg \"todo\" in a string such as \"mastodon\".\n             * If the term ends in a non-word character, then \\b won't match on\n             * the boundary to the next non-word character, which would likely\n             * be a space. For example `/\\bFIX!\\b/.test('FIX! blah') === false`.\n             * In these cases, use no bounding match. Same applies for the\n             * prefix, handled below.\n             */var suffix=/\\w$/.test(term)?\"\\\\b\":\"\";if(location===\"start\"){/*\n                 * When matching at the start, ignore leading whitespace, and\n                 * there's no need to worry about word boundaries.\n                 */prefix=\"^\\\\s*\";}else if(/^\\w/.test(term)){prefix=\"\\\\b\";}else{prefix=\"\";}return new RegExp(prefix+escaped+suffix,\"i\");}var warningRegExps=warningTerms.map(convertToRegExp);/**\n         * Checks the specified comment for matches of the configured warning terms and returns the matches.\n         * @param {string} comment The comment which is checked.\n         * @returns {Array} All matched warning terms for this comment.\n         */function commentContainsWarningTerm(comment){var matches=[];warningRegExps.forEach(function(regex,index){if(regex.test(comment)){matches.push(warningTerms[index]);}});return matches;}/**\n         * Checks the specified node for matching warning comments and reports them.\n         * @param {ASTNode} node The AST node being checked.\n         * @returns {void} undefined.\n         */function checkComment(node){if(astUtils.isDirectiveComment(node)&&selfConfigRegEx.test(node.value)){return;}var matches=commentContainsWarningTerm(node.value);matches.forEach(function(matchedTerm){context.report({node:node,message:\"Unexpected '{{matchedTerm}}' comment.\",data:{matchedTerm:matchedTerm}});});}return{BlockComment:checkComment,LineComment:checkComment};}};},{\"../ast-utils\":605}],812:[function(require,module,exports){/**\n * @fileoverview Rule to disallow whitespace before properties\n * @author Kai Cataldo\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow whitespace before properties\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[]},create:function create(context){var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Reports whitespace before property token\n         * @param {ASTNode} node - the node to report in the event of an error\n         * @param {Token} leftToken - the left token\n         * @param {Token} rightToken - the right token\n         * @returns {void}\n         * @private\n         */function reportError(node,leftToken,rightToken){var replacementText=node.computed?\"\":\".\";context.report({node:node,message:\"Unexpected whitespace before property {{propName}}.\",data:{propName:sourceCode.getText(node.property)},fix:function fix(fixer){if(!node.computed&&astUtils.isDecimalInteger(node.object)){// If the object is a number literal, fixing it to something like 5.toString() would cause a SyntaxError.\n// Don't fix this case.\nreturn null;}return fixer.replaceTextRange([leftToken.range[1],rightToken.range[0]],replacementText);}});}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{MemberExpression:function MemberExpression(node){var rightToken=void 0;var leftToken=void 0;if(!astUtils.isTokenOnSameLine(node.object,node.property)){return;}if(node.computed){rightToken=sourceCode.getTokenBefore(node.property,astUtils.isOpeningBracketToken);leftToken=sourceCode.getTokenBefore(rightToken);}else{rightToken=sourceCode.getFirstToken(node.property);leftToken=sourceCode.getTokenBefore(rightToken,1);}if(sourceCode.isSpaceBetweenTokens(leftToken,rightToken)){reportError(node,leftToken,rightToken);}}};}};},{\"../ast-utils\":605}],813:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of with statement\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `with` statements\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){return{WithStatement:function WithStatement(node){context.report({node:node,message:\"Unexpected use of 'with' statement.\"});}};}};},{}],814:[function(require,module,exports){/**\n * @fileoverview enforce the location of single-line statements\n * @author Teddy Katz\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar POSITION_SCHEMA={enum:[\"beside\",\"below\",\"any\"]};module.exports={meta:{docs:{description:\"enforce the location of single-line statements\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[POSITION_SCHEMA,{properties:{overrides:{properties:{if:POSITION_SCHEMA,else:POSITION_SCHEMA,while:POSITION_SCHEMA,do:POSITION_SCHEMA,for:POSITION_SCHEMA},additionalProperties:false}},additionalProperties:false}]},create:function create(context){var sourceCode=context.getSourceCode();//----------------------------------------------------------------------\n// Helpers\n//----------------------------------------------------------------------\n/**\n         * Gets the applicable preference for a particular keyword\n         * @param {string} keywordName The name of a keyword, e.g. 'if'\n         * @returns {string} The applicable option for the keyword, e.g. 'beside'\n         */function getOption(keywordName){return context.options[1]&&context.options[1].overrides&&context.options[1].overrides[keywordName]||context.options[0]||\"beside\";}/**\n         * Validates the location of a single-line statement\n         * @param {ASTNode} node The single-line statement\n         * @param {string} keywordName The applicable keyword name for the single-line statement\n         * @returns {void}\n         */function validateStatement(node,keywordName){var option=getOption(keywordName);if(node.type===\"BlockStatement\"||option===\"any\"){return;}var tokenBefore=sourceCode.getTokenBefore(node);if(tokenBefore.loc.end.line===node.loc.start.line&&option===\"below\"){context.report({node:node,message:\"Expected a linebreak before this statement.\",fix:function fix(fixer){return fixer.insertTextBefore(node,\"\\n\");}});}else if(tokenBefore.loc.end.line!==node.loc.start.line&&option===\"beside\"){context.report({node:node,message:\"Expected no linebreak before this statement.\",fix:function fix(fixer){if(sourceCode.getText().slice(tokenBefore.range[1],node.range[0]).trim()){return null;}return fixer.replaceTextRange([tokenBefore.range[1],node.range[0]],\" \");}});}}//----------------------------------------------------------------------\n// Public\n//----------------------------------------------------------------------\nreturn{IfStatement:function IfStatement(node){validateStatement(node.consequent,\"if\");// Check the `else` node, but don't check 'else if' statements.\nif(node.alternate&&node.alternate.type!==\"IfStatement\"){validateStatement(node.alternate,\"else\");}},WhileStatement:function WhileStatement(node){return validateStatement(node.body,\"while\");},DoWhileStatement:function DoWhileStatement(node){return validateStatement(node.body,\"do\");},ForStatement:function ForStatement(node){return validateStatement(node.body,\"for\");},ForInStatement:function ForInStatement(node){return validateStatement(node.body,\"for\");},ForOfStatement:function ForOfStatement(node){return validateStatement(node.body,\"for\");}};}};},{}],815:[function(require,module,exports){/**\n * @fileoverview Rule to require or disallow line breaks inside braces.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n// Schema objects.\nvar OPTION_VALUE={oneOf:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{multiline:{type:\"boolean\"},minProperties:{type:\"integer\",minimum:0}},additionalProperties:false,minProperties:1}]};/**\n * Normalizes a given option value.\n *\n * @param {string|Object|undefined} value - An option value to parse.\n * @returns {{multiline: boolean, minProperties: number}} Normalized option object.\n */function normalizeOptionValue(value){var multiline=false;var minProperties=Number.POSITIVE_INFINITY;if(value){if(value===\"always\"){minProperties=0;}else if(value===\"never\"){minProperties=Number.POSITIVE_INFINITY;}else{multiline=Boolean(value.multiline);minProperties=value.minProperties||Number.POSITIVE_INFINITY;}}else{multiline=true;}return{multiline:multiline,minProperties:minProperties};}/**\n * Normalizes a given option value.\n *\n * @param {string|Object|undefined} options - An option value to parse.\n * @returns {{ObjectExpression: {multiline: boolean, minProperties: number}, ObjectPattern: {multiline: boolean, minProperties: number}}} Normalized option object.\n */function normalizeOptions(options){if(options&&(options.ObjectExpression||options.ObjectPattern)){return{ObjectExpression:normalizeOptionValue(options.ObjectExpression),ObjectPattern:normalizeOptionValue(options.ObjectPattern)};}var value=normalizeOptionValue(options);return{ObjectExpression:value,ObjectPattern:value};}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent line breaks inside braces\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{oneOf:[OPTION_VALUE,{type:\"object\",properties:{ObjectExpression:OPTION_VALUE,ObjectPattern:OPTION_VALUE},additionalProperties:false,minProperties:1}]}]},create:function create(context){var sourceCode=context.getSourceCode();var normalizedOptions=normalizeOptions(context.options[0]);/**\n         * Reports a given node if it violated this rule.\n         *\n         * @param {ASTNode} node - A node to check. This is an ObjectExpression node or an ObjectPattern node.\n         * @param {{multiline: boolean, minProperties: number}} options - An option object.\n         * @returns {void}\n         */function check(node){var options=normalizedOptions[node.type];var openBrace=sourceCode.getFirstToken(node);var closeBrace=sourceCode.getLastToken(node);var first=sourceCode.getTokenAfter(openBrace,{includeComments:true});var last=sourceCode.getTokenBefore(closeBrace,{includeComments:true});var needsLinebreaks=node.properties.length>=options.minProperties||options.multiline&&node.properties.length>0&&first.loc.start.line!==last.loc.end.line;/*\n             * Use tokens or comments to check multiline or not.\n             * But use only tokens to check whether line breaks are needed.\n             * This allows:\n             *     var obj = { // eslint-disable-line foo\n             *         a: 1\n             *     }\n             */first=sourceCode.getTokenAfter(openBrace);last=sourceCode.getTokenBefore(closeBrace);if(needsLinebreaks){if(astUtils.isTokenOnSameLine(openBrace,first)){context.report({message:\"Expected a line break after this opening brace.\",node:node,loc:openBrace.loc.start,fix:function fix(fixer){return fixer.insertTextAfter(openBrace,\"\\n\");}});}if(astUtils.isTokenOnSameLine(last,closeBrace)){context.report({message:\"Expected a line break before this closing brace.\",node:node,loc:closeBrace.loc.start,fix:function fix(fixer){return fixer.insertTextBefore(closeBrace,\"\\n\");}});}}else{if(!astUtils.isTokenOnSameLine(openBrace,first)){context.report({message:\"Unexpected line break after this opening brace.\",node:node,loc:openBrace.loc.start,fix:function fix(fixer){return fixer.removeRange([openBrace.range[1],first.range[0]]);}});}if(!astUtils.isTokenOnSameLine(last,closeBrace)){context.report({message:\"Unexpected line break before this closing brace.\",node:node,loc:closeBrace.loc.start,fix:function fix(fixer){return fixer.removeRange([last.range[1],closeBrace.range[0]]);}});}}}return{ObjectExpression:check,ObjectPattern:check};}};},{\"../ast-utils\":605}],816:[function(require,module,exports){/**\n * @fileoverview Disallows or enforces spaces inside of object literals.\n * @author Jamund Ferguson\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing inside braces\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{arraysInObjects:{type:\"boolean\"},objectsInObjects:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var spaced=context.options[0]===\"always\",sourceCode=context.getSourceCode();/**\n         * Determines whether an option is set, relative to the spacing option.\n         * If spaced is \"always\", then check whether option is set to false.\n         * If spaced is \"never\", then check whether option is set to true.\n         * @param {Object} option - The option to exclude.\n         * @returns {boolean} Whether or not the property is excluded.\n         */function isOptionSet(option){return context.options[1]?context.options[1][option]===!spaced:false;}var options={spaced:spaced,arraysInObjectsException:isOptionSet(\"arraysInObjects\"),objectsInObjectsException:isOptionSet(\"objectsInObjects\")};//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n        * Reports that there shouldn't be a space after the first token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportNoBeginningSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"There should be no space after '{{token}}'.\",data:{token:token.value},fix:function fix(fixer){var nextToken=context.getSourceCode().getTokenAfter(token);return fixer.removeRange([token.range[1],nextToken.range[0]]);}});}/**\n        * Reports that there shouldn't be a space before the last token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportNoEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"There should be no space before '{{token}}'.\",data:{token:token.value},fix:function fix(fixer){var previousToken=context.getSourceCode().getTokenBefore(token);return fixer.removeRange([previousToken.range[1],token.range[0]]);}});}/**\n        * Reports that there should be a space after the first token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportRequiredBeginningSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"A space is required after '{{token}}'.\",data:{token:token.value},fix:function fix(fixer){return fixer.insertTextAfter(token,\" \");}});}/**\n        * Reports that there should be a space before the last token\n        * @param {ASTNode} node - The node to report in the event of an error.\n        * @param {Token} token - The token to use for the report.\n        * @returns {void}\n        */function reportRequiredEndingSpace(node,token){context.report({node:node,loc:token.loc.start,message:\"A space is required before '{{token}}'.\",data:{token:token.value},fix:function fix(fixer){return fixer.insertTextBefore(token,\" \");}});}/**\n         * Determines if spacing in curly braces is valid.\n         * @param {ASTNode} node The AST node to check.\n         * @param {Token} first The first token to check (should be the opening brace)\n         * @param {Token} second The second token to check (should be first after the opening brace)\n         * @param {Token} penultimate The penultimate token to check (should be last before closing brace)\n         * @param {Token} last The last token to check (should be closing brace)\n         * @returns {void}\n         */function validateBraceSpacing(node,first,second,penultimate,last){if(astUtils.isTokenOnSameLine(first,second)){var firstSpaced=sourceCode.isSpaceBetweenTokens(first,second);if(options.spaced&&!firstSpaced){reportRequiredBeginningSpace(node,first);}if(!options.spaced&&firstSpaced){reportNoBeginningSpace(node,first);}}if(astUtils.isTokenOnSameLine(penultimate,last)){var shouldCheckPenultimate=options.arraysInObjectsException&&astUtils.isClosingBracketToken(penultimate)||options.objectsInObjectsException&&astUtils.isClosingBraceToken(penultimate);var penultimateType=shouldCheckPenultimate&&sourceCode.getNodeByRangeIndex(penultimate.start).type;var closingCurlyBraceMustBeSpaced=options.arraysInObjectsException&&penultimateType===\"ArrayExpression\"||options.objectsInObjectsException&&(penultimateType===\"ObjectExpression\"||penultimateType===\"ObjectPattern\")?!options.spaced:options.spaced;var lastSpaced=sourceCode.isSpaceBetweenTokens(penultimate,last);if(closingCurlyBraceMustBeSpaced&&!lastSpaced){reportRequiredEndingSpace(node,last);}if(!closingCurlyBraceMustBeSpaced&&lastSpaced){reportNoEndingSpace(node,last);}}}/**\n         * Gets '}' token of an object node.\n         *\n         * Because the last token of object patterns might be a type annotation,\n         * this traverses tokens preceded by the last property, then returns the\n         * first '}' token.\n         *\n         * @param {ASTNode} node - The node to get. This node is an\n         *      ObjectExpression or an ObjectPattern. And this node has one or\n         *      more properties.\n         * @returns {Token} '}' token.\n         */function getClosingBraceOfObject(node){var lastProperty=node.properties[node.properties.length-1];return sourceCode.getTokenAfter(lastProperty,astUtils.isClosingBraceToken);}/**\n         * Reports a given object node if spacing in curly braces is invalid.\n         * @param {ASTNode} node - An ObjectExpression or ObjectPattern node to check.\n         * @returns {void}\n         */function checkForObject(node){if(node.properties.length===0){return;}var first=sourceCode.getFirstToken(node),last=getClosingBraceOfObject(node),second=sourceCode.getTokenAfter(first),penultimate=sourceCode.getTokenBefore(last);validateBraceSpacing(node,first,second,penultimate,last);}/**\n         * Reports a given import node if spacing in curly braces is invalid.\n         * @param {ASTNode} node - An ImportDeclaration node to check.\n         * @returns {void}\n         */function checkForImport(node){if(node.specifiers.length===0){return;}var firstSpecifier=node.specifiers[0];var lastSpecifier=node.specifiers[node.specifiers.length-1];if(lastSpecifier.type!==\"ImportSpecifier\"){return;}if(firstSpecifier.type!==\"ImportSpecifier\"){firstSpecifier=node.specifiers[1];}var first=sourceCode.getTokenBefore(firstSpecifier),last=sourceCode.getTokenAfter(lastSpecifier,astUtils.isNotCommaToken),second=sourceCode.getTokenAfter(first),penultimate=sourceCode.getTokenBefore(last);validateBraceSpacing(node,first,second,penultimate,last);}/**\n         * Reports a given export node if spacing in curly braces is invalid.\n         * @param {ASTNode} node - An ExportNamedDeclaration node to check.\n         * @returns {void}\n         */function checkForExport(node){if(node.specifiers.length===0){return;}var firstSpecifier=node.specifiers[0],lastSpecifier=node.specifiers[node.specifiers.length-1],first=sourceCode.getTokenBefore(firstSpecifier),last=sourceCode.getTokenAfter(lastSpecifier,astUtils.isNotCommaToken),second=sourceCode.getTokenAfter(first),penultimate=sourceCode.getTokenBefore(last);validateBraceSpacing(node,first,second,penultimate,last);}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{// var {x} = y;\nObjectPattern:checkForObject,// var y = {x: 'y'}\nObjectExpression:checkForObject,// import {y} from 'x';\nImportDeclaration:checkForImport,// export {name} from 'yo';\nExportNamedDeclaration:checkForExport};}};},{\"../ast-utils\":605}],817:[function(require,module,exports){/**\n * @fileoverview Rule to enforce placing object properties on separate lines.\n * @author Vitor Balocco\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce placing object properties on separate lines\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{allowMultiplePropertiesPerLine:{type:\"boolean\"}},additionalProperties:false}],fixable:\"whitespace\"},create:function create(context){var allowSameLine=context.options[0]&&Boolean(context.options[0].allowMultiplePropertiesPerLine);var errorMessage=allowSameLine?\"Object properties must go on a new line if they aren't all on the same line.\":\"Object properties must go on a new line.\";var sourceCode=context.getSourceCode();return{ObjectExpression:function ObjectExpression(node){if(allowSameLine){if(node.properties.length>1){var firstTokenOfFirstProperty=sourceCode.getFirstToken(node.properties[0]);var lastTokenOfLastProperty=sourceCode.getLastToken(node.properties[node.properties.length-1]);if(firstTokenOfFirstProperty.loc.end.line===lastTokenOfLastProperty.loc.start.line){// All keys and values are on the same line\nreturn;}}}var _loop=function _loop(i){var lastTokenOfPreviousProperty=sourceCode.getLastToken(node.properties[i-1]);var firstTokenOfCurrentProperty=sourceCode.getFirstToken(node.properties[i]);if(lastTokenOfPreviousProperty.loc.end.line===firstTokenOfCurrentProperty.loc.start.line){context.report({node:node,loc:firstTokenOfCurrentProperty.loc.start,message:errorMessage,fix:function fix(fixer){var comma=sourceCode.getTokenBefore(firstTokenOfCurrentProperty);var rangeAfterComma=[comma.range[1],firstTokenOfCurrentProperty.range[0]];// Don't perform a fix if there are any comments between the comma and the next property.\nif(sourceCode.text.slice(rangeAfterComma[0],rangeAfterComma[1]).trim()){return null;}return fixer.replaceTextRange(rangeAfterComma,\"\\n\");}});}};for(var i=1;i<node.properties.length;i++){_loop(i);}}};}};},{}],818:[function(require,module,exports){/**\n * @fileoverview Rule to enforce concise object methods and properties.\n * @author Jamund Ferguson\n */\"use strict\";var OPTIONS={always:\"always\",never:\"never\",methods:\"methods\",properties:\"properties\",consistent:\"consistent\",consistentAsNeeded:\"consistent-as-needed\"};//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow method and property shorthand syntax for object literals\",category:\"ECMAScript 6\",recommended:false},fixable:\"code\",schema:{anyOf:[{type:\"array\",items:[{enum:[\"always\",\"methods\",\"properties\",\"never\",\"consistent\",\"consistent-as-needed\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"always\",\"methods\",\"properties\"]},{type:\"object\",properties:{avoidQuotes:{type:\"boolean\"}},additionalProperties:false}],minItems:0,maxItems:2},{type:\"array\",items:[{enum:[\"always\",\"methods\"]},{type:\"object\",properties:{ignoreConstructors:{type:\"boolean\"},avoidQuotes:{type:\"boolean\"},avoidExplicitReturnArrows:{type:\"boolean\"}},additionalProperties:false}],minItems:0,maxItems:2}]}},create:function create(context){var APPLY=context.options[0]||OPTIONS.always;var APPLY_TO_METHODS=APPLY===OPTIONS.methods||APPLY===OPTIONS.always;var APPLY_TO_PROPS=APPLY===OPTIONS.properties||APPLY===OPTIONS.always;var APPLY_NEVER=APPLY===OPTIONS.never;var APPLY_CONSISTENT=APPLY===OPTIONS.consistent;var APPLY_CONSISTENT_AS_NEEDED=APPLY===OPTIONS.consistentAsNeeded;var PARAMS=context.options[1]||{};var IGNORE_CONSTRUCTORS=PARAMS.ignoreConstructors;var AVOID_QUOTES=PARAMS.avoidQuotes;var AVOID_EXPLICIT_RETURN_ARROWS=!!PARAMS.avoidExplicitReturnArrows;var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Determines if the first character of the name is a capital letter.\n         * @param {string} name The name of the node to evaluate.\n         * @returns {boolean} True if the first character of the property name is a capital letter, false if not.\n         * @private\n         */function isConstructor(name){var firstChar=name.charAt(0);return firstChar===firstChar.toUpperCase();}/**\n         * Determines if the property can have a shorthand form.\n         * @param {ASTNode} property Property AST node\n         * @returns {boolean} True if the property can have a shorthand form\n         * @private\n         **/function canHaveShorthand(property){return property.kind!==\"set\"&&property.kind!==\"get\"&&property.type!==\"SpreadProperty\"&&property.type!==\"ExperimentalSpreadProperty\";}/**\n          * Checks whether a node is a string literal.\n          * @param   {ASTNode} node - Any AST node.\n          * @returns {boolean} `true` if it is a string literal.\n          */function isStringLiteral(node){return node.type===\"Literal\"&&typeof node.value===\"string\";}/**\n         * Determines if the property is a shorthand or not.\n         * @param {ASTNode} property Property AST node\n         * @returns {boolean} True if the property is considered shorthand, false if not.\n         * @private\n         **/function isShorthand(property){// property.method is true when `{a(){}}`.\nreturn property.shorthand||property.method;}/**\n         * Determines if the property's key and method or value are named equally.\n         * @param {ASTNode} property Property AST node\n         * @returns {boolean} True if the key and value are named equally, false if not.\n         * @private\n         **/function isRedundant(property){var value=property.value;if(value.type===\"FunctionExpression\"){return!value.id;// Only anonymous should be shorthand method.\n}if(value.type===\"Identifier\"){return astUtils.getStaticPropertyName(property)===value.name;}return false;}/**\n         * Ensures that an object's properties are consistently shorthand, or not shorthand at all.\n         * @param   {ASTNode} node Property AST node\n         * @param   {boolean} checkRedundancy Whether to check longform redundancy\n         * @returns {void}\n         **/function checkConsistency(node,checkRedundancy){// We are excluding getters/setters and spread properties as they are considered neither longform nor shorthand.\nvar properties=node.properties.filter(canHaveShorthand);// Do we still have properties left after filtering the getters and setters?\nif(properties.length>0){var shorthandProperties=properties.filter(isShorthand);// If we do not have an equal number of longform properties as\n// shorthand properties, we are using the annotations inconsistently\nif(shorthandProperties.length!==properties.length){// We have at least 1 shorthand property\nif(shorthandProperties.length>0){context.report({node:node,message:\"Unexpected mix of shorthand and non-shorthand properties.\"});}else if(checkRedundancy){// If all properties of the object contain a method or value with a name matching it's key,\n// all the keys are redundant.\nvar canAlwaysUseShorthand=properties.every(isRedundant);if(canAlwaysUseShorthand){context.report({node:node,message:\"Expected shorthand for all properties.\"});}}}}}/**\n        * Fixes a FunctionExpression node by making it into a shorthand property.\n        * @param {SourceCodeFixer} fixer The fixer object\n        * @param {ASTNode} node A `Property` node that has a `FunctionExpression` or `ArrowFunctionExpression` as its value\n        * @returns {Object} A fix for this node\n        */function makeFunctionShorthand(fixer,node){var firstKeyToken=node.computed?sourceCode.getFirstToken(node,astUtils.isOpeningBracketToken):sourceCode.getFirstToken(node.key);var lastKeyToken=node.computed?sourceCode.getFirstTokenBetween(node.key,node.value,astUtils.isClosingBracketToken):sourceCode.getLastToken(node.key);var keyText=sourceCode.text.slice(firstKeyToken.range[0],lastKeyToken.range[1]);var keyPrefix=\"\";if(node.value.generator){keyPrefix=\"*\";}else if(node.value.async){keyPrefix=\"async \";}if(node.value.type===\"FunctionExpression\"){var functionToken=sourceCode.getTokens(node.value).find(function(token){return token.type===\"Keyword\"&&token.value===\"function\";});var tokenBeforeParams=node.value.generator?sourceCode.getTokenAfter(functionToken):functionToken;return fixer.replaceTextRange([firstKeyToken.range[0],node.range[1]],keyPrefix+keyText+sourceCode.text.slice(tokenBeforeParams.range[1],node.value.range[1]));}var arrowToken=sourceCode.getTokens(node.value).find(function(token){return token.value===\"=>\";});var tokenBeforeArrow=sourceCode.getTokenBefore(arrowToken);var hasParensAroundParameters=tokenBeforeArrow.type===\"Punctuator\"&&tokenBeforeArrow.value===\")\";var oldParamText=sourceCode.text.slice(sourceCode.getFirstToken(node.value,node.value.async?1:0).range[0],tokenBeforeArrow.range[1]);var newParamText=hasParensAroundParameters?oldParamText:\"(\"+oldParamText+\")\";return fixer.replaceTextRange([firstKeyToken.range[0],node.range[1]],keyPrefix+keyText+newParamText+sourceCode.text.slice(arrowToken.range[1],node.value.range[1]));}/**\n        * Fixes a FunctionExpression node by making it into a longform property.\n        * @param {SourceCodeFixer} fixer The fixer object\n        * @param {ASTNode} node A `Property` node that has a `FunctionExpression` as its value\n        * @returns {Object} A fix for this node\n        */function makeFunctionLongform(fixer,node){var firstKeyToken=node.computed?sourceCode.getTokens(node).find(function(token){return token.value===\"[\";}):sourceCode.getFirstToken(node.key);var lastKeyToken=node.computed?sourceCode.getTokensBetween(node.key,node.value).find(function(token){return token.value===\"]\";}):sourceCode.getLastToken(node.key);var keyText=sourceCode.text.slice(firstKeyToken.range[0],lastKeyToken.range[1]);var functionHeader=\"function\";if(node.value.generator){functionHeader=\"function*\";}else if(node.value.async){functionHeader=\"async function\";}return fixer.replaceTextRange([node.range[0],lastKeyToken.range[1]],keyText+\": \"+functionHeader);}/*\n         * To determine whether a given arrow function has a lexical identifier (`this`, `arguments`, `super`, or `new.target`),\n         * create a stack of functions that define these identifiers (i.e. all functions except arrow functions) as the AST is\n         * traversed. Whenever a new function is encountered, create a new entry on the stack (corresponding to a different lexical\n         * scope of `this`), and whenever a function is exited, pop that entry off the stack. When an arrow function is entered,\n         * keep a reference to it on the current stack entry, and remove that reference when the arrow function is exited.\n         * When a lexical identifier is encountered, mark all the arrow functions on the current stack entry by adding them\n         * to an `arrowsWithLexicalIdentifiers` set. Any arrow function in that set will not be reported by this rule,\n         * because converting it into a method would change the value of one of the lexical identifiers.\n         */var lexicalScopeStack=[];var arrowsWithLexicalIdentifiers=new _weakSet2.default();var argumentsIdentifiers=new _weakSet2.default();/**\n        * Enters a function. This creates a new lexical identifier scope, so a new Set of arrow functions is pushed onto the stack.\n        * Also, this marks all `arguments` identifiers so that they can be detected later.\n        * @returns {void}\n        */function enterFunction(){lexicalScopeStack.unshift(new _set3.default());context.getScope().variables.filter(function(variable){return variable.name===\"arguments\";}).forEach(function(variable){variable.references.map(function(ref){return ref.identifier;}).forEach(function(identifier){return argumentsIdentifiers.add(identifier);});});}/**\n        * Exits a function. This pops the current set of arrow functions off the lexical scope stack.\n        * @returns {void}\n        */function exitFunction(){lexicalScopeStack.shift();}/**\n        * Marks the current function as having a lexical keyword. This implies that all arrow functions\n        * in the current lexical scope contain a reference to this lexical keyword.\n        * @returns {void}\n        */function reportLexicalIdentifier(){lexicalScopeStack[0].forEach(function(arrowFunction){return arrowsWithLexicalIdentifiers.add(arrowFunction);});}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Program:enterFunction,FunctionDeclaration:enterFunction,FunctionExpression:enterFunction,\"Program:exit\":exitFunction,\"FunctionDeclaration:exit\":exitFunction,\"FunctionExpression:exit\":exitFunction,ArrowFunctionExpression:function ArrowFunctionExpression(node){lexicalScopeStack[0].add(node);},\"ArrowFunctionExpression:exit\":function ArrowFunctionExpressionExit(node){lexicalScopeStack[0].delete(node);},ThisExpression:reportLexicalIdentifier,Super:reportLexicalIdentifier,MetaProperty:function MetaProperty(node){if(node.meta.name===\"new\"&&node.property.name===\"target\"){reportLexicalIdentifier();}},Identifier:function Identifier(node){if(argumentsIdentifiers.has(node)){reportLexicalIdentifier();}},ObjectExpression:function ObjectExpression(node){if(APPLY_CONSISTENT){checkConsistency(node,false);}else if(APPLY_CONSISTENT_AS_NEEDED){checkConsistency(node,true);}},\"Property:exit\":function PropertyExit(node){var isConciseProperty=node.method||node.shorthand;// Ignore destructuring assignment\nif(node.parent.type===\"ObjectPattern\"){return;}// getters and setters are ignored\nif(node.kind===\"get\"||node.kind===\"set\"){return;}// only computed methods can fail the following checks\nif(node.computed&&node.value.type!==\"FunctionExpression\"&&node.value.type!==\"ArrowFunctionExpression\"){return;}//--------------------------------------------------------------\n// Checks for property/method shorthand.\nif(isConciseProperty){if(node.method&&(APPLY_NEVER||AVOID_QUOTES&&isStringLiteral(node.key))){var message=APPLY_NEVER?\"Expected longform method syntax.\":\"Expected longform method syntax for string literal keys.\";// { x() {} } should be written as { x: function() {} }\ncontext.report({node:node,message:message,fix:function fix(fixer){return makeFunctionLongform(fixer,node);}});}else if(APPLY_NEVER){// { x } should be written as { x: x }\ncontext.report({node:node,message:\"Expected longform property syntax.\",fix:function fix(fixer){return fixer.insertTextAfter(node.key,\": \"+node.key.name);}});}}else if(APPLY_TO_METHODS&&!node.value.id&&(node.value.type===\"FunctionExpression\"||node.value.type===\"ArrowFunctionExpression\")){if(IGNORE_CONSTRUCTORS&&isConstructor(node.key.name)){return;}if(AVOID_QUOTES&&isStringLiteral(node.key)){return;}// {[x]: function(){}} should be written as {[x]() {}}\nif(node.value.type===\"FunctionExpression\"||node.value.type===\"ArrowFunctionExpression\"&&node.value.body.type===\"BlockStatement\"&&AVOID_EXPLICIT_RETURN_ARROWS&&!arrowsWithLexicalIdentifiers.has(node.value)){context.report({node:node,message:\"Expected method shorthand.\",fix:function fix(fixer){return makeFunctionShorthand(fixer,node);}});}}else if(node.value.type===\"Identifier\"&&node.key.name===node.value.name&&APPLY_TO_PROPS){// {x: x} should be written as {x}\ncontext.report({node:node,message:\"Expected property shorthand.\",fix:function fix(fixer){return fixer.replaceText(node,node.value.name);}});}else if(node.value.type===\"Identifier\"&&node.key.type===\"Literal\"&&node.key.value===node.value.name&&APPLY_TO_PROPS){if(AVOID_QUOTES){return;}// {\"x\": x} should be written as {x}\ncontext.report({node:node,message:\"Expected property shorthand.\",fix:function fix(fixer){return fixer.replaceText(node,node.value.name);}});}}};}};},{\"../ast-utils\":605}],819:[function(require,module,exports){/**\n * @fileoverview Rule to check multiple var declarations per line\n * @author Alberto Rodríguez\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow newlines around variable declarations\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"always\",\"initializations\"]}],fixable:\"whitespace\"},create:function create(context){var ERROR_MESSAGE=\"Expected variable declaration to be on a new line.\";var always=context.options[0]===\"always\";//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Determine if provided keyword is a variant of for specifiers\n         * @private\n         * @param {string} keyword - keyword to test\n         * @returns {boolean} True if `keyword` is a variant of for specifier\n         */function isForTypeSpecifier(keyword){return keyword===\"ForStatement\"||keyword===\"ForInStatement\"||keyword===\"ForOfStatement\";}/**\n         * Checks newlines around variable declarations.\n         * @private\n         * @param {ASTNode} node - `VariableDeclaration` node to test\n         * @returns {void}\n         */function checkForNewLine(node){if(isForTypeSpecifier(node.parent.type)){return;}var declarations=node.declarations;var prev=void 0;declarations.forEach(function(current){if(prev&&prev.loc.end.line===current.loc.start.line){if(always||prev.init||current.init){context.report({node:node,message:ERROR_MESSAGE,loc:current.loc.start,fix:function fix(fixer){return fixer.insertTextBefore(current,\"\\n\");}});}}prev=current;});}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{VariableDeclaration:checkForNewLine};}};},{}],820:[function(require,module,exports){/**\n * @fileoverview A rule to control the use of single variable declarations.\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};module.exports={meta:{docs:{description:\"enforce variables to be declared either together or separately in functions\",category:\"Stylistic Issues\",recommended:false},schema:[{oneOf:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{var:{enum:[\"always\",\"never\"]},let:{enum:[\"always\",\"never\"]},const:{enum:[\"always\",\"never\"]}},additionalProperties:false},{type:\"object\",properties:{initialized:{enum:[\"always\",\"never\"]},uninitialized:{enum:[\"always\",\"never\"]}},additionalProperties:false}]}]},create:function create(context){var MODE_ALWAYS=\"always\",MODE_NEVER=\"never\";var mode=context.options[0]||MODE_ALWAYS;var options={};if(typeof mode===\"string\"){// simple options configuration with just a string\noptions.var={uninitialized:mode,initialized:mode};options.let={uninitialized:mode,initialized:mode};options.const={uninitialized:mode,initialized:mode};}else if((typeof mode===\"undefined\"?\"undefined\":_typeof(mode))===\"object\"){// options configuration is an object\nif(mode.hasOwnProperty(\"var\")&&typeof mode.var===\"string\"){options.var={uninitialized:mode.var,initialized:mode.var};}if(mode.hasOwnProperty(\"let\")&&typeof mode.let===\"string\"){options.let={uninitialized:mode.let,initialized:mode.let};}if(mode.hasOwnProperty(\"const\")&&typeof mode.const===\"string\"){options.const={uninitialized:mode.const,initialized:mode.const};}if(mode.hasOwnProperty(\"uninitialized\")){if(!options.var){options.var={};}if(!options.let){options.let={};}if(!options.const){options.const={};}options.var.uninitialized=mode.uninitialized;options.let.uninitialized=mode.uninitialized;options.const.uninitialized=mode.uninitialized;}if(mode.hasOwnProperty(\"initialized\")){if(!options.var){options.var={};}if(!options.let){options.let={};}if(!options.const){options.const={};}options.var.initialized=mode.initialized;options.let.initialized=mode.initialized;options.const.initialized=mode.initialized;}}//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar functionStack=[];var blockStack=[];/**\n         * Increments the blockStack counter.\n         * @returns {void}\n         * @private\n         */function startBlock(){blockStack.push({let:{initialized:false,uninitialized:false},const:{initialized:false,uninitialized:false}});}/**\n         * Increments the functionStack counter.\n         * @returns {void}\n         * @private\n         */function startFunction(){functionStack.push({initialized:false,uninitialized:false});startBlock();}/**\n         * Decrements the blockStack counter.\n         * @returns {void}\n         * @private\n         */function endBlock(){blockStack.pop();}/**\n         * Decrements the functionStack counter.\n         * @returns {void}\n         * @private\n         */function endFunction(){functionStack.pop();endBlock();}/**\n         * Records whether initialized or uninitialized variables are defined in current scope.\n         * @param {string} statementType node.kind, one of: \"var\", \"let\", or \"const\"\n         * @param {ASTNode[]} declarations List of declarations\n         * @param {Object} currentScope The scope being investigated\n         * @returns {void}\n         * @private\n         */function recordTypes(statementType,declarations,currentScope){for(var i=0;i<declarations.length;i++){if(declarations[i].init===null){if(options[statementType]&&options[statementType].uninitialized===MODE_ALWAYS){currentScope.uninitialized=true;}}else{if(options[statementType]&&options[statementType].initialized===MODE_ALWAYS){currentScope.initialized=true;}}}}/**\n         * Determines the current scope (function or block)\n         * @param  {string} statementType node.kind, one of: \"var\", \"let\", or \"const\"\n         * @returns {Object} The scope associated with statementType\n         */function getCurrentScope(statementType){var currentScope=void 0;if(statementType===\"var\"){currentScope=functionStack[functionStack.length-1];}else if(statementType===\"let\"){currentScope=blockStack[blockStack.length-1].let;}else if(statementType===\"const\"){currentScope=blockStack[blockStack.length-1].const;}return currentScope;}/**\n         * Counts the number of initialized and uninitialized declarations in a list of declarations\n         * @param {ASTNode[]} declarations List of declarations\n         * @returns {Object} Counts of 'uninitialized' and 'initialized' declarations\n         * @private\n         */function countDeclarations(declarations){var counts={uninitialized:0,initialized:0};for(var i=0;i<declarations.length;i++){if(declarations[i].init===null){counts.uninitialized++;}else{counts.initialized++;}}return counts;}/**\n         * Determines if there is more than one var statement in the current scope.\n         * @param {string} statementType node.kind, one of: \"var\", \"let\", or \"const\"\n         * @param {ASTNode[]} declarations List of declarations\n         * @returns {boolean} Returns true if it is the first var declaration, false if not.\n         * @private\n         */function hasOnlyOneStatement(statementType,declarations){var declarationCounts=countDeclarations(declarations);var currentOptions=options[statementType]||{};var currentScope=getCurrentScope(statementType);if(currentOptions.uninitialized===MODE_ALWAYS&&currentOptions.initialized===MODE_ALWAYS){if(currentScope.uninitialized||currentScope.initialized){return false;}}if(declarationCounts.uninitialized>0){if(currentOptions.uninitialized===MODE_ALWAYS&&currentScope.uninitialized){return false;}}if(declarationCounts.initialized>0){if(currentOptions.initialized===MODE_ALWAYS&&currentScope.initialized){return false;}}recordTypes(statementType,declarations,currentScope);return true;}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{Program:startFunction,FunctionDeclaration:startFunction,FunctionExpression:startFunction,ArrowFunctionExpression:startFunction,BlockStatement:startBlock,ForStatement:startBlock,ForInStatement:startBlock,ForOfStatement:startBlock,SwitchStatement:startBlock,VariableDeclaration:function VariableDeclaration(node){var parent=node.parent;var type=node.kind;if(!options[type]){return;}var declarations=node.declarations;var declarationCounts=countDeclarations(declarations);// always\nif(!hasOnlyOneStatement(type,declarations)){if(options[type].initialized===MODE_ALWAYS&&options[type].uninitialized===MODE_ALWAYS){context.report({node:node,message:\"Combine this with the previous '{{type}}' statement.\",data:{type:type}});}else{if(options[type].initialized===MODE_ALWAYS){context.report({node:node,message:\"Combine this with the previous '{{type}}' statement with initialized variables.\",data:{type:type}});}if(options[type].uninitialized===MODE_ALWAYS){if(node.parent.left===node&&(node.parent.type===\"ForInStatement\"||node.parent.type===\"ForOfStatement\")){return;}context.report({node:node,message:\"Combine this with the previous '{{type}}' statement with uninitialized variables.\",data:{type:type}});}}}// never\nif(parent.type!==\"ForStatement\"||parent.init!==node){var totalDeclarations=declarationCounts.uninitialized+declarationCounts.initialized;if(totalDeclarations>1){if(options[type].initialized===MODE_NEVER&&options[type].uninitialized===MODE_NEVER){// both initialized and uninitialized\ncontext.report({node:node,message:\"Split '{{type}}' declarations into multiple statements.\",data:{type:type}});}else if(options[type].initialized===MODE_NEVER&&declarationCounts.initialized>0){// initialized\ncontext.report({node:node,message:\"Split initialized '{{type}}' declarations into multiple statements.\",data:{type:type}});}else if(options[type].uninitialized===MODE_NEVER&&declarationCounts.uninitialized>0){// uninitialized\ncontext.report({node:node,message:\"Split uninitialized '{{type}}' declarations into multiple statements.\",data:{type:type}});}}}},\"ForStatement:exit\":endBlock,\"ForOfStatement:exit\":endBlock,\"ForInStatement:exit\":endBlock,\"SwitchStatement:exit\":endBlock,\"BlockStatement:exit\":endBlock,\"Program:exit\":endFunction,\"FunctionDeclaration:exit\":endFunction,\"FunctionExpression:exit\":endFunction,\"ArrowFunctionExpression:exit\":endFunction};}};},{}],821:[function(require,module,exports){/**\n * @fileoverview Rule to replace assignment expressions with operator assignment\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether an operator is commutative and has an operator assignment\n * shorthand form.\n * @param   {string}  operator Operator to check.\n * @returns {boolean}          True if the operator is commutative and has a\n *     shorthand form.\n */function isCommutativeOperatorWithShorthand(operator){return[\"*\",\"&\",\"^\",\"|\"].indexOf(operator)>=0;}/**\n * Checks whether an operator is not commuatative and has an operator assignment\n * shorthand form.\n * @param   {string}  operator Operator to check.\n * @returns {boolean}          True if the operator is not commuatative and has\n *     a shorthand form.\n */function isNonCommutativeOperatorWithShorthand(operator){return[\"+\",\"-\",\"/\",\"%\",\"<<\",\">>\",\">>>\",\"**\"].indexOf(operator)>=0;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n/**\n * Checks whether two expressions reference the same value. For example:\n *     a = a\n *     a.b = a.b\n *     a[0] = a[0]\n *     a['b'] = a['b']\n * @param   {ASTNode} a Left side of the comparison.\n * @param   {ASTNode} b Right side of the comparison.\n * @returns {boolean}   True if both sides match and reference the same value.\n */function same(a,b){if(a.type!==b.type){return false;}switch(a.type){case\"Identifier\":return a.name===b.name;case\"Literal\":return a.value===b.value;case\"MemberExpression\":/*\n             * x[0] = x[0]\n             * x[y] = x[y]\n             * x.y = x.y\n             */return same(a.object,b.object)&&same(a.property,b.property);default:return false;}}/**\n* Determines if the left side of a node can be safely fixed (i.e. if it activates the same getters/setters and)\n* toString calls regardless of whether assignment shorthand is used)\n* @param {ASTNode} node The node on the left side of the expression\n* @returns {boolean} `true` if the node can be fixed\n*/function canBeFixed(node){return node.type===\"Identifier\"||node.type===\"MemberExpression\"&&node.object.type===\"Identifier\"&&(!node.computed||node.property.type===\"Literal\");}module.exports={meta:{docs:{description:\"require or disallow assignment operator shorthand where possible\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"always\",\"never\"]}],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();/**\n        * Returns the operator token of an AssignmentExpression or BinaryExpression\n        * @param {ASTNode} node An AssignmentExpression or BinaryExpression node\n        * @returns {Token} The operator token in the node\n        */function getOperatorToken(node){return sourceCode.getFirstTokenBetween(node.left,node.right,function(token){return token.value===node.operator;});}/**\n         * Ensures that an assignment uses the shorthand form where possible.\n         * @param   {ASTNode} node An AssignmentExpression node.\n         * @returns {void}\n         */function verify(node){if(node.operator!==\"=\"||node.right.type!==\"BinaryExpression\"){return;}var left=node.left;var expr=node.right;var operator=expr.operator;if(isCommutativeOperatorWithShorthand(operator)||isNonCommutativeOperatorWithShorthand(operator)){if(same(left,expr.left)){context.report({node:node,message:\"Assignment can be replaced with operator assignment.\",fix:function fix(fixer){if(canBeFixed(left)){var equalsToken=getOperatorToken(node);var operatorToken=getOperatorToken(expr);var leftText=sourceCode.getText().slice(node.range[0],equalsToken.range[0]);var rightText=sourceCode.getText().slice(operatorToken.range[1],node.right.range[1]);return fixer.replaceText(node,\"\"+leftText+expr.operator+\"=\"+rightText);}return null;}});}else if(same(left,expr.right)&&isCommutativeOperatorWithShorthand(operator)){/*\n                     * This case can't be fixed safely.\n                     * If `a` and `b` both have custom valueOf() behavior, then fixing `a = b * a` to `a *= b` would\n                     * change the execution order of the valueOf() functions.\n                     */context.report({node:node,message:\"Assignment can be replaced with operator assignment.\"});}}}/**\n         * Warns if an assignment expression uses operator assignment shorthand.\n         * @param   {ASTNode} node An AssignmentExpression node.\n         * @returns {void}\n         */function prohibit(node){if(node.operator!==\"=\"){context.report({node:node,message:\"Unexpected operator assignment shorthand.\",fix:function fix(fixer){if(canBeFixed(node.left)){var operatorToken=getOperatorToken(node);var leftText=sourceCode.getText().slice(node.range[0],operatorToken.range[0]);var newOperator=node.operator.slice(0,-1);var rightText=void 0;// If this change would modify precedence (e.g. `foo *= bar + 1` => `foo = foo * (bar + 1)`), parenthesize the right side.\nif(astUtils.getPrecedence(node.right)<=astUtils.getPrecedence({type:\"BinaryExpression\",operator:newOperator})&&!astUtils.isParenthesised(sourceCode,node.right)){rightText=sourceCode.text.slice(operatorToken.range[1],node.right.range[0])+\"(\"+sourceCode.getText(node.right)+\")\";}else{rightText=sourceCode.text.slice(operatorToken.range[1],node.range[1]);}return fixer.replaceText(node,leftText+\"= \"+leftText+newOperator+rightText);}return null;}});}}return{AssignmentExpression:context.options[0]!==\"never\"?verify:prohibit};}};},{\"../ast-utils\":605}],822:[function(require,module,exports){/**\n * @fileoverview Operator linebreak - enforces operator linebreak style of two types: after and before\n * @author Benoît Zugmeyer\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent linebreak style for operators\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"after\",\"before\",\"none\",null]},{type:\"object\",properties:{overrides:{type:\"object\",properties:{anyOf:{type:\"string\",enum:[\"after\",\"before\",\"none\",\"ignore\"]}}}},additionalProperties:false}],fixable:\"code\"},create:function create(context){var usedDefaultGlobal=!context.options[0];var globalStyle=context.options[0]||\"after\";var options=context.options[1]||{};var styleOverrides=options.overrides?(0,_assign4.default)({},options.overrides):{};if(usedDefaultGlobal&&!styleOverrides[\"?\"]){styleOverrides[\"?\"]=\"before\";}if(usedDefaultGlobal&&!styleOverrides[\":\"]){styleOverrides[\":\"]=\"before\";}var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n        * Gets a fixer function to fix rule issues\n        * @param {Token} operatorToken The operator token of an expression\n        * @param {string} desiredStyle The style for the rule. One of 'before', 'after', 'none'\n        * @returns {Function} A fixer function\n        */function getFixer(operatorToken,desiredStyle){return function(fixer){var tokenBefore=sourceCode.getTokenBefore(operatorToken);var tokenAfter=sourceCode.getTokenAfter(operatorToken);var textBefore=sourceCode.text.slice(tokenBefore.range[1],operatorToken.range[0]);var textAfter=sourceCode.text.slice(operatorToken.range[1],tokenAfter.range[0]);var hasLinebreakBefore=!astUtils.isTokenOnSameLine(tokenBefore,operatorToken);var hasLinebreakAfter=!astUtils.isTokenOnSameLine(operatorToken,tokenAfter);var newTextBefore=void 0,newTextAfter=void 0;if(hasLinebreakBefore!==hasLinebreakAfter&&desiredStyle!==\"none\"){// If there is a comment before and after the operator, don't do a fix.\nif(sourceCode.getTokenBefore(operatorToken,{includeComments:true})!==tokenBefore&&sourceCode.getTokenAfter(operatorToken,{includeComments:true})!==tokenAfter){return null;}/*\n                     * If there is only one linebreak and it's on the wrong side of the operator, swap the text before and after the operator.\n                     * foo &&\n                     *           bar\n                     * would get fixed to\n                     * foo\n                     *        && bar\n                     */newTextBefore=textAfter;newTextAfter=textBefore;}else{var LINEBREAK_REGEX=astUtils.createGlobalLinebreakMatcher();// Otherwise, if no linebreak is desired and no comments interfere, replace the linebreaks with empty strings.\nnewTextBefore=desiredStyle===\"before\"||textBefore.trim()?textBefore:textBefore.replace(LINEBREAK_REGEX,\"\");newTextAfter=desiredStyle===\"after\"||textAfter.trim()?textAfter:textAfter.replace(LINEBREAK_REGEX,\"\");// If there was no change (due to interfering comments), don't output a fix.\nif(newTextBefore===textBefore&&newTextAfter===textAfter){return null;}}if(newTextAfter===\"\"&&tokenAfter.type===\"Punctuator\"&&\"+-\".includes(operatorToken.value)&&tokenAfter.value===operatorToken.value){// To avoid accidentally creating a ++ or -- operator, insert a space if the operator is a +/- and the following token is a unary +/-.\nnewTextAfter+=\" \";}return fixer.replaceTextRange([tokenBefore.range[1],tokenAfter.range[0]],newTextBefore+operatorToken.value+newTextAfter);};}/**\n         * Checks the operator placement\n         * @param {ASTNode} node The node to check\n         * @param {ASTNode} leftSide The node that comes before the operator in `node`\n         * @private\n         * @returns {void}\n         */function validateNode(node,leftSide){// When the left part of a binary expression is a single expression wrapped in\n// parentheses (ex: `(a) + b`), leftToken will be the last token of the expression\n// and operatorToken will be the closing parenthesis.\n// The leftToken should be the last closing parenthesis, and the operatorToken\n// should be the token right after that.\nvar operatorToken=sourceCode.getTokenAfter(leftSide,astUtils.isNotClosingParenToken);var leftToken=sourceCode.getTokenBefore(operatorToken);var rightToken=sourceCode.getTokenAfter(operatorToken);var operator=operatorToken.value;var operatorStyleOverride=styleOverrides[operator];var style=operatorStyleOverride||globalStyle;var fix=getFixer(operatorToken,style);// if single line\nif(astUtils.isTokenOnSameLine(leftToken,operatorToken)&&astUtils.isTokenOnSameLine(operatorToken,rightToken)){// do nothing.\n}else if(operatorStyleOverride!==\"ignore\"&&!astUtils.isTokenOnSameLine(leftToken,operatorToken)&&!astUtils.isTokenOnSameLine(operatorToken,rightToken)){// lone operator\ncontext.report({node:node,loc:{line:operatorToken.loc.end.line,column:operatorToken.loc.end.column},message:\"Bad line breaking before and after '{{operator}}'.\",data:{operator:operator},fix:fix});}else if(style===\"before\"&&astUtils.isTokenOnSameLine(leftToken,operatorToken)){context.report({node:node,loc:{line:operatorToken.loc.end.line,column:operatorToken.loc.end.column},message:\"'{{operator}}' should be placed at the beginning of the line.\",data:{operator:operator},fix:fix});}else if(style===\"after\"&&astUtils.isTokenOnSameLine(operatorToken,rightToken)){context.report({node:node,loc:{line:operatorToken.loc.end.line,column:operatorToken.loc.end.column},message:\"'{{operator}}' should be placed at the end of the line.\",data:{operator:operator},fix:fix});}else if(style===\"none\"){context.report({node:node,loc:{line:operatorToken.loc.end.line,column:operatorToken.loc.end.column},message:\"There should be no line break before or after '{{operator}}'.\",data:{operator:operator},fix:fix});}}/**\n         * Validates a binary expression using `validateNode`\n         * @param {BinaryExpression|LogicalExpression|AssignmentExpression} node node to be validated\n         * @returns {void}\n         */function validateBinaryExpression(node){validateNode(node,node.left);}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{BinaryExpression:validateBinaryExpression,LogicalExpression:validateBinaryExpression,AssignmentExpression:validateBinaryExpression,VariableDeclarator:function VariableDeclarator(node){if(node.init){validateNode(node,node.id);}},ConditionalExpression:function ConditionalExpression(node){validateNode(node,node.test);validateNode(node,node.consequent);}};}};},{\"../ast-utils\":605}],823:[function(require,module,exports){/**\n * @fileoverview A rule to ensure blank lines within blocks.\n * @author Mathias Schreck <https://github.com/lo1tuma>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow padding within blocks\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{oneOf:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{blocks:{enum:[\"always\",\"never\"]},switches:{enum:[\"always\",\"never\"]},classes:{enum:[\"always\",\"never\"]}},additionalProperties:false,minProperties:1}]}]},create:function create(context){var options={};var config=context.options[0]||\"always\";if(typeof config===\"string\"){options.blocks=config===\"always\";}else{if(config.hasOwnProperty(\"blocks\")){options.blocks=config.blocks===\"always\";}if(config.hasOwnProperty(\"switches\")){options.switches=config.switches===\"always\";}if(config.hasOwnProperty(\"classes\")){options.classes=config.classes===\"always\";}}var ALWAYS_MESSAGE=\"Block must be padded by blank lines.\",NEVER_MESSAGE=\"Block must not be padded by blank lines.\";var sourceCode=context.getSourceCode();/**\n         * Gets the open brace token from a given node.\n         * @param {ASTNode} node - A BlockStatement or SwitchStatement node from which to get the open brace.\n         * @returns {Token} The token of the open brace.\n         */function getOpenBrace(node){if(node.type===\"SwitchStatement\"){return sourceCode.getTokenBefore(node.cases[0]);}return sourceCode.getFirstToken(node);}/**\n         * Checks if the given parameter is a comment node\n         * @param {ASTNode|Token} node An AST node or token\n         * @returns {boolean} True if node is a comment\n         */function isComment(node){return node.type===\"Line\"||node.type===\"Block\";}/**\n         * Checks if there is padding between two tokens\n         * @param {Token} first The first token\n         * @param {Token} second The second token\n         * @returns {boolean} True if there is at least a line between the tokens\n         */function isPaddingBetweenTokens(first,second){return second.loc.start.line-first.loc.end.line>=2;}/**\n         * Checks if the given token has a blank line after it.\n         * @param {Token} token The token to check.\n         * @returns {boolean} Whether or not the token is followed by a blank line.\n         */function getFirstBlockToken(token){var prev=token,first=token;do{prev=first;first=sourceCode.getTokenAfter(first,{includeComments:true});}while(isComment(first)&&first.loc.start.line===prev.loc.end.line);return first;}/**\n         * Checks if the given token is preceeded by a blank line.\n         * @param {Token} token The token to check\n         * @returns {boolean} Whether or not the token is preceeded by a blank line\n         */function getLastBlockToken(token){var last=token,next=token;do{next=last;last=sourceCode.getTokenBefore(last,{includeComments:true});}while(isComment(last)&&last.loc.end.line===next.loc.start.line);return last;}/**\n         * Checks if a node should be padded, according to the rule config.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {boolean} True if the node should be padded, false otherwise.\n         */function requirePaddingFor(node){switch(node.type){case\"BlockStatement\":return options.blocks;case\"SwitchStatement\":return options.switches;case\"ClassBody\":return options.classes;/* istanbul ignore next */default:throw new Error(\"unreachable\");}}/**\n         * Checks the given BlockStatement node to be padded if the block is not empty.\n         * @param {ASTNode} node The AST node of a BlockStatement.\n         * @returns {void} undefined.\n         */function checkPadding(node){var openBrace=getOpenBrace(node),firstBlockToken=getFirstBlockToken(openBrace),tokenBeforeFirst=sourceCode.getTokenBefore(firstBlockToken,{includeComments:true}),closeBrace=sourceCode.getLastToken(node),lastBlockToken=getLastBlockToken(closeBrace),tokenAfterLast=sourceCode.getTokenAfter(lastBlockToken,{includeComments:true}),blockHasTopPadding=isPaddingBetweenTokens(tokenBeforeFirst,firstBlockToken),blockHasBottomPadding=isPaddingBetweenTokens(lastBlockToken,tokenAfterLast);if(requirePaddingFor(node)){if(!blockHasTopPadding){context.report({node:node,loc:{line:tokenBeforeFirst.loc.start.line,column:tokenBeforeFirst.loc.start.column},fix:function fix(fixer){return fixer.insertTextAfter(tokenBeforeFirst,\"\\n\");},message:ALWAYS_MESSAGE});}if(!blockHasBottomPadding){context.report({node:node,loc:{line:tokenAfterLast.loc.end.line,column:tokenAfterLast.loc.end.column-1},fix:function fix(fixer){return fixer.insertTextBefore(tokenAfterLast,\"\\n\");},message:ALWAYS_MESSAGE});}}else{if(blockHasTopPadding){context.report({node:node,loc:{line:tokenBeforeFirst.loc.start.line,column:tokenBeforeFirst.loc.start.column},fix:function fix(fixer){return fixer.replaceTextRange([tokenBeforeFirst.end,firstBlockToken.start-firstBlockToken.loc.start.column],\"\\n\");},message:NEVER_MESSAGE});}if(blockHasBottomPadding){context.report({node:node,loc:{line:tokenAfterLast.loc.end.line,column:tokenAfterLast.loc.end.column-1},message:NEVER_MESSAGE,fix:function fix(fixer){return fixer.replaceTextRange([lastBlockToken.end,tokenAfterLast.start-tokenAfterLast.loc.start.column],\"\\n\");}});}}}var rule={};if(options.hasOwnProperty(\"switches\")){rule.SwitchStatement=function(node){if(node.cases.length===0){return;}checkPadding(node);};}if(options.hasOwnProperty(\"blocks\")){rule.BlockStatement=function(node){if(node.body.length===0){return;}checkPadding(node);};}if(options.hasOwnProperty(\"classes\")){rule.ClassBody=function(node){if(node.body.length===0){return;}checkPadding(node);};}return rule;}};},{}],824:[function(require,module,exports){/**\n * @fileoverview A rule to suggest using arrow functions as callbacks.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given variable is a function name.\n * @param {escope.Variable} variable - A variable to check.\n * @returns {boolean} `true` if the variable is a function name.\n */function isFunctionName(variable){return variable&&variable.defs[0].type===\"FunctionName\";}/**\n * Checks whether or not a given MetaProperty node equals to a given value.\n * @param {ASTNode} node - A MetaProperty node to check.\n * @param {string} metaName - The name of `MetaProperty.meta`.\n * @param {string} propertyName - The name of `MetaProperty.property`.\n * @returns {boolean} `true` if the node is the specific value.\n */function checkMetaProperty(node,metaName,propertyName){return node.meta.name===metaName&&node.property.name===propertyName;}/**\n * Gets the variable object of `arguments` which is defined implicitly.\n * @param {escope.Scope} scope - A scope to get.\n * @returns {escope.Variable} The found variable object.\n */function getVariableOfArguments(scope){var variables=scope.variables;for(var i=0;i<variables.length;++i){var variable=variables[i];if(variable.name===\"arguments\"){/*\n             * If there was a parameter which is named \"arguments\", the\n             * implicit \"arguments\" is not defined.\n             * So does fast return with null.\n             */return variable.identifiers.length===0?variable:null;}}/* istanbul ignore next */return null;}/**\n * Checkes whether or not a given node is a callback.\n * @param {ASTNode} node - A node to check.\n * @returns {Object}\n *   {boolean} retv.isCallback - `true` if the node is a callback.\n *   {boolean} retv.isLexicalThis - `true` if the node is with `.bind(this)`.\n */function getCallbackInfo(node){var retv={isCallback:false,isLexicalThis:false};var parent=node.parent;while(node){switch(parent.type){// Checks parents recursively.\ncase\"LogicalExpression\":case\"ConditionalExpression\":break;// Checks whether the parent node is `.bind(this)` call.\ncase\"MemberExpression\":if(parent.object===node&&!parent.property.computed&&parent.property.type===\"Identifier\"&&parent.property.name===\"bind\"&&parent.parent.type===\"CallExpression\"&&parent.parent.callee===parent){retv.isLexicalThis=parent.parent.arguments.length===1&&parent.parent.arguments[0].type===\"ThisExpression\";node=parent;parent=parent.parent;}else{return retv;}break;// Checks whether the node is a callback.\ncase\"CallExpression\":case\"NewExpression\":if(parent.callee!==node){retv.isCallback=true;}return retv;default:return retv;}node=parent;parent=parent.parent;}/* istanbul ignore next */throw new Error(\"unreachable\");}/**\n* Checks whether a simple list of parameters contains any duplicates. This does not handle complex\nparameter lists (e.g. with destructuring), since complex parameter lists are a SyntaxError with duplicate\nparameter names anyway. Instead, it always returns `false` for complex parameter lists.\n* @param {ASTNode[]} paramsList The list of parameters for a function\n* @returns {boolean} `true` if the list of parameters contains any duplicates\n*/function hasDuplicateParams(paramsList){return paramsList.every(function(param){return param.type===\"Identifier\";})&&paramsList.length!==new _set3.default(paramsList.map(function(param){return param.name;})).size;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require arrow functions as callbacks\",category:\"ECMAScript 6\",recommended:false},schema:[{type:\"object\",properties:{allowNamedFunctions:{type:\"boolean\"},allowUnboundThis:{type:\"boolean\"}},additionalProperties:false}],fixable:\"code\"},create:function create(context){var options=context.options[0]||{};var allowUnboundThis=options.allowUnboundThis!==false;// default to true\nvar allowNamedFunctions=options.allowNamedFunctions;var sourceCode=context.getSourceCode();/*\n         * {Array<{this: boolean, super: boolean, meta: boolean}>}\n         * - this - A flag which shows there are one or more ThisExpression.\n         * - super - A flag which shows there are one or more Super.\n         * - meta - A flag which shows there are one or more MethProperty.\n         */var stack=[];/**\n         * Pushes new function scope with all `false` flags.\n         * @returns {void}\n         */function enterScope(){stack.push({this:false,super:false,meta:false});}/**\n         * Pops a function scope from the stack.\n         * @returns {{this: boolean, super: boolean, meta: boolean}} The information of the last scope.\n         */function exitScope(){return stack.pop();}return{// Reset internal state.\nProgram:function Program(){stack=[];},// If there are below, it cannot replace with arrow functions merely.\nThisExpression:function ThisExpression(){var info=stack[stack.length-1];if(info){info.this=true;}},Super:function Super(){var info=stack[stack.length-1];if(info){info.super=true;}},MetaProperty:function MetaProperty(node){var info=stack[stack.length-1];if(info&&checkMetaProperty(node,\"new\",\"target\")){info.meta=true;}},// To skip nested scopes.\nFunctionDeclaration:enterScope,\"FunctionDeclaration:exit\":exitScope,// Main.\nFunctionExpression:enterScope,\"FunctionExpression:exit\":function FunctionExpressionExit(node){var scopeInfo=exitScope();// Skip named function expressions\nif(allowNamedFunctions&&node.id&&node.id.name){return;}// Skip generators.\nif(node.generator){return;}// Skip recursive functions.\nvar nameVar=context.getDeclaredVariables(node)[0];if(isFunctionName(nameVar)&&nameVar.references.length>0){return;}// Skip if it's using arguments.\nvar variable=getVariableOfArguments(context.getScope());if(variable&&variable.references.length>0){return;}// Reports if it's a callback which can replace with arrows.\nvar callbackInfo=getCallbackInfo(node);if(callbackInfo.isCallback&&(!allowUnboundThis||!scopeInfo.this||callbackInfo.isLexicalThis)&&!scopeInfo.super&&!scopeInfo.meta){context.report({node:node,message:\"Unexpected function expression.\",fix:function fix(fixer){if(!callbackInfo.isLexicalThis&&scopeInfo.this||hasDuplicateParams(node.params)){// If the callback function does not have .bind(this) and contains a reference to `this`, there\n// is no way to determine what `this` should be, so don't perform any fixes.\n// If the callback function has duplicates in its list of parameters (possible in sloppy mode),\n// don't replace it with an arrow function, because this is a SyntaxError with arrow functions.\nreturn null;}var paramsLeftParen=node.params.length?sourceCode.getTokenBefore(node.params[0]):sourceCode.getTokenBefore(node.body,1);var paramsRightParen=sourceCode.getTokenBefore(node.body);var asyncKeyword=node.async?\"async \":\"\";var paramsFullText=sourceCode.text.slice(paramsLeftParen.range[0],paramsRightParen.range[1]);if(callbackInfo.isLexicalThis){// If the callback function has `.bind(this)`, replace it with an arrow function and remove the binding.\nreturn fixer.replaceText(node.parent.parent,\"\"+asyncKeyword+paramsFullText+\" => \"+sourceCode.getText(node.body));}// Otherwise, only replace the `function` keyword and parameters with the arrow function parameters.\nreturn fixer.replaceTextRange([node.start,node.body.start],\"\"+asyncKeyword+paramsFullText+\" => \");}});}}};}};},{}],825:[function(require,module,exports){/**\n * @fileoverview A rule to suggest using of const declaration for variables that are never reassigned after declared.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar PATTERN_TYPE=/^(?:.+?Pattern|RestElement|SpreadProperty|ExperimentalRestProperty|Property)$/;var DECLARATION_HOST_TYPE=/^(?:Program|BlockStatement|SwitchCase)$/;var DESTRUCTURING_HOST_TYPE=/^(?:VariableDeclarator|AssignmentExpression)$/;/**\n * Adds multiple items to the tail of an array.\n *\n * @param {any[]} array - A destination to add.\n * @param {any[]} values - Items to be added.\n * @returns {void}\n */var pushAll=Function.apply.bind(Array.prototype.push);/**\n * Checks whether a given node is located at `ForStatement.init` or not.\n *\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node is located at `ForStatement.init`.\n */function isInitOfForStatement(node){return node.parent.type===\"ForStatement\"&&node.parent.init===node;}/**\n * Checks whether a given Identifier node becomes a VariableDeclaration or not.\n *\n * @param {ASTNode} identifier - An Identifier node to check.\n * @returns {boolean} `true` if the node can become a VariableDeclaration.\n */function canBecomeVariableDeclaration(identifier){var node=identifier.parent;while(PATTERN_TYPE.test(node.type)){node=node.parent;}return node.type===\"VariableDeclarator\"||node.type===\"AssignmentExpression\"&&node.parent.type===\"ExpressionStatement\"&&DECLARATION_HOST_TYPE.test(node.parent.parent.type);}/**\n * Gets an identifier node of a given variable.\n *\n * If the initialization exists or one or more reading references exist before\n * the first assignment, the identifier node is the node of the declaration.\n * Otherwise, the identifier node is the node of the first assignment.\n *\n * If the variable should not change to const, this function returns null.\n * - If the variable is reassigned.\n * - If the variable is never initialized nor assigned.\n * - If the variable is initialized in a different scope from the declaration.\n * - If the unique assignment of the variable cannot change to a declaration.\n *   e.g. `if (a) b = 1` / `return (b = 1)`\n * - If the variable is declared in the global scope and `eslintUsed` is `true`.\n *   `/*exported foo` directive comment makes such variables. This rule does not\n *   warn such variables because this rule cannot distinguish whether the\n *   exported variables are reassigned or not.\n *\n * @param {escope.Variable} variable - A variable to get.\n * @param {boolean} ignoreReadBeforeAssign -\n *      The value of `ignoreReadBeforeAssign` option.\n * @returns {ASTNode|null}\n *      An Identifier node if the variable should change to const.\n *      Otherwise, null.\n */function getIdentifierIfShouldBeConst(variable,ignoreReadBeforeAssign){if(variable.eslintUsed&&variable.scope.type===\"global\"){return null;}/*\n     * Due to a bug in acorn, code such as `let foo = 1; let foo = 2;` will not throw a syntax error. As a sanity\n     * check, make sure that the variable only has one declaration. After the parsing bug is fixed, this check\n     * will no longer be necessary, because variables declared with `let` or `const` should always have exactly one\n     * declaration.\n     * https://github.com/ternjs/acorn/issues/487\n     */if(variable.defs.length>1){return null;}// Finds the unique WriteReference.\nvar writer=null;var isReadBeforeInit=false;var references=variable.references;for(var i=0;i<references.length;++i){var reference=references[i];if(reference.isWrite()){var isReassigned=writer!==null&&writer.identifier!==reference.identifier;if(isReassigned){return null;}writer=reference;}else if(reference.isRead()&&writer===null){if(ignoreReadBeforeAssign){return null;}isReadBeforeInit=true;}}// If the assignment is from a different scope, ignore it.\n// If the assignment cannot change to a declaration, ignore it.\nvar shouldBeConst=writer!==null&&writer.from===variable.scope&&canBecomeVariableDeclaration(writer.identifier);if(!shouldBeConst){return null;}if(isReadBeforeInit){return variable.defs[0].name;}return writer.identifier;}/**\n * Gets the VariableDeclarator/AssignmentExpression node that a given reference\n * belongs to.\n * This is used to detect a mix of reassigned and never reassigned in a\n * destructuring.\n *\n * @param {escope.Reference} reference - A reference to get.\n * @returns {ASTNode|null} A VariableDeclarator/AssignmentExpression node or\n *      null.\n */function getDestructuringHost(reference){if(!reference.isWrite()){return null;}var node=reference.identifier.parent;while(PATTERN_TYPE.test(node.type)){node=node.parent;}if(!DESTRUCTURING_HOST_TYPE.test(node.type)){return null;}return node;}/**\n * Groups by the VariableDeclarator/AssignmentExpression node that each\n * reference of given variables belongs to.\n * This is used to detect a mix of reassigned and never reassigned in a\n * destructuring.\n *\n * @param {escope.Variable[]} variables - Variables to group by destructuring.\n * @param {boolean} ignoreReadBeforeAssign -\n *      The value of `ignoreReadBeforeAssign` option.\n * @returns {Map<ASTNode, ASTNode[]>} Grouped identifier nodes.\n */function groupByDestructuring(variables,ignoreReadBeforeAssign){var identifierMap=new _map4.default();for(var i=0;i<variables.length;++i){var variable=variables[i];var references=variable.references;var identifier=getIdentifierIfShouldBeConst(variable,ignoreReadBeforeAssign);var prevId=null;for(var j=0;j<references.length;++j){var reference=references[j];var id=reference.identifier;// Avoid counting a reference twice or more for default values of\n// destructuring.\nif(id===prevId){continue;}prevId=id;// Add the identifier node into the destructuring group.\nvar group=getDestructuringHost(reference);if(group){if(identifierMap.has(group)){identifierMap.get(group).push(identifier);}else{identifierMap.set(group,[identifier]);}}}}return identifierMap;}/**\n * Finds the nearest parent of node with a given type.\n *\n * @param {ASTNode} node – The node to search from.\n * @param {string} type – The type field of the parent node.\n * @param {Function} shouldStop – a predicate that returns true if the traversal should stop, and false otherwise.\n * @returns {ASTNode} The closest ancestor with the specified type; null if no such ancestor exists.\n */function findUp(node,type,shouldStop){if(!node||shouldStop(node)){return null;}if(node.type===type){return node;}return findUp(node.parent,type,shouldStop);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `const` declarations for variables that are never reassigned after declared\",category:\"ECMAScript 6\",recommended:false},fixable:\"code\",schema:[{type:\"object\",properties:{destructuring:{enum:[\"any\",\"all\"]},ignoreReadBeforeAssign:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{};var sourceCode=context.getSourceCode();var checkingMixedDestructuring=options.destructuring!==\"all\";var ignoreReadBeforeAssign=options.ignoreReadBeforeAssign===true;var variables=[];/**\n         * Reports given identifier nodes if all of the nodes should be declared\n         * as const.\n         *\n         * The argument 'nodes' is an array of Identifier nodes.\n         * This node is the result of 'getIdentifierIfShouldBeConst()', so it's\n         * nullable. In simple declaration or assignment cases, the length of\n         * the array is 1. In destructuring cases, the length of the array can\n         * be 2 or more.\n         *\n         * @param {(escope.Reference|null)[]} nodes -\n         *      References which are grouped by destructuring to report.\n         * @returns {void}\n         */function checkGroup(nodes){var nodesToReport=nodes.filter(Boolean);if(nodes.length&&(checkingMixedDestructuring||nodesToReport.length===nodes.length)){var varDeclParent=findUp(nodes[0],\"VariableDeclaration\",function(parentNode){return parentNode.type.endsWith(\"Statement\");});var shouldFix=varDeclParent&&// If there are multiple variable declarations, like {let a = 1, b = 2}, then\n// do not attempt to fix if one of the declarations should be `const`. It's\n// too hard to know how the developer would want to automatically resolve the issue.\nvarDeclParent.declarations.length===1&&(// Don't do a fix unless the variable is initialized (or it's in a for-in or for-of loop)\nvarDeclParent.parent.type===\"ForInStatement\"||varDeclParent.parent.type===\"ForOfStatement\"||varDeclParent.declarations[0].init)&&// If options.destucturing is \"all\", then this warning will not occur unless\n// every assignment in the destructuring should be const. In that case, it's safe\n// to apply the fix.\nnodesToReport.length===nodes.length;nodesToReport.forEach(function(node){context.report({node:node,message:\"'{{name}}' is never reassigned. Use 'const' instead.\",data:node,fix:shouldFix?function(fixer){return fixer.replaceText(sourceCode.getFirstToken(varDeclParent),\"const\");}:null});});}}return{\"Program:exit\":function ProgramExit(){groupByDestructuring(variables,ignoreReadBeforeAssign).forEach(checkGroup);},VariableDeclaration:function VariableDeclaration(node){if(node.kind===\"let\"&&!isInitOfForStatement(node)){pushAll(variables,context.getDeclaredVariables(node));}}};}};},{}],826:[function(require,module,exports){/**\n * @fileoverview Prefer destructuring from arrays and objects\n * @author Alex LaFroscia\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require destructuring from arrays and/or objects\",category:\"ECMAScript 6\",recommended:false},schema:[{type:\"object\",properties:{array:{type:\"boolean\"},object:{type:\"boolean\"}},additionalProperties:false},{type:\"object\",properties:{enforceForRenamedProperties:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var checkArrays=true;var checkObjects=true;var enforceForRenamedProperties=false;var enabledTypes=context.options[0];var additionalOptions=context.options[1];if(enabledTypes){if(typeof enabledTypes.array!==\"undefined\"){checkArrays=enabledTypes.array;}if(typeof enabledTypes.object!==\"undefined\"){checkObjects=enabledTypes.object;}}if(additionalOptions){if(typeof additionalOptions.enforceForRenamedProperties!==\"undefined\"){enforceForRenamedProperties=additionalOptions.enforceForRenamedProperties;}}//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Determines if the given node node is accessing an array index\n         *\n         * This is used to differentiate array index access from object property\n         * access.\n         *\n         * @param {ASTNode} node the node to evaluate\n         * @returns {boolean} whether or not the node is an integer\n         */function isArrayIndexAccess(node){return(0,_isInteger2.default)(node.property.value);}/**\n         * Report that the given node should use destructuring\n         *\n         * @param {ASTNode} reportNode the node to report\n         * @param {string} type the type of destructuring that should have been done\n         * @returns {void}\n         */function report(reportNode,type){context.report({node:reportNode,message:\"Use {{type}} destructuring.\",data:{type:type}});}/**\n         * Check that the `prefer-destructuring` rules are followed based on the\n         * given left- and right-hand side of the assignment.\n         *\n         * Pulled out into a separate method so that VariableDeclarators and\n         * AssignmentExpressions can share the same verification logic.\n         *\n         * @param {ASTNode} leftNode the left-hand side of the assignment\n         * @param {ASTNode} rightNode the right-hand side of the assignment\n         * @param {ASTNode} reportNode the node to report the error on\n         * @returns {void}\n         */function performCheck(leftNode,rightNode,reportNode){if(rightNode.type!==\"MemberExpression\"){return;}if(checkArrays&&isArrayIndexAccess(rightNode)){report(reportNode,\"array\");return;}if(checkObjects&&enforceForRenamedProperties){report(reportNode,\"object\");return;}if(checkObjects){var property=rightNode.property;if(property.type===\"Literal\"&&leftNode.name===property.value||property.type===\"Identifier\"&&leftNode.name===property.name){report(reportNode,\"object\");}}}/**\n         * Check if a given variable declarator is coming from an property access\n         * that should be using destructuring instead\n         *\n         * @param {ASTNode} node the variable declarator to check\n         * @returns {void}\n         */function checkVariableDeclarator(node){// Skip if variable is declared without assignment\nif(!node.init){return;}// We only care about member expressions past this point\nif(node.init.type!==\"MemberExpression\"){return;}performCheck(node.id,node.init,node);}/**\n         * Run the `prefer-destructuring` check on an AssignmentExpression\n         *\n         * @param {ASTNode} node the AssignmentExpression node\n         * @returns {void}\n         */function checkAssigmentExpression(node){if(node.operator===\"=\"){performCheck(node.left,node.right,node);}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{VariableDeclarator:checkVariableDeclarator,AssignmentExpression:checkAssigmentExpression};}};},{}],827:[function(require,module,exports){/**\n * @fileoverview Rule to disallow `parseInt()` in favor of binary, octal, and hexadecimal literals\n * @author Annie Zhang, Henry Zhu\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow `parseInt()` in favor of binary, octal, and hexadecimal literals\",category:\"ECMAScript 6\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var radixMap={2:\"binary\",8:\"octal\",16:\"hexadecimal\"};var prefixMap={2:\"0b\",8:\"0o\",16:\"0x\"};//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{CallExpression:function CallExpression(node){// doesn't check parseInt() if it doesn't have a radix argument\nif(node.arguments.length!==2){return;}// only error if the radix is 2, 8, or 16\nvar radixName=radixMap[node.arguments[1].value];if(node.callee.type===\"Identifier\"&&node.callee.name===\"parseInt\"&&radixName&&node.arguments[0].type===\"Literal\"){context.report({node:node,message:\"Use {{radixName}} literals instead of parseInt().\",data:{radixName:radixName},fix:function fix(fixer){var newPrefix=prefixMap[node.arguments[1].value];if(+(newPrefix+node.arguments[0].value)!==parseInt(node.arguments[0].value,node.arguments[1].value)){// If the newly-produced literal would be invalid, (e.g. 0b1234),\n// or it would yield an incorrect parseInt result for some other reason, don't make a fix.\nreturn null;}return fixer.replaceText(node,prefixMap[node.arguments[1].value]+node.arguments[0].value);}});}}};}};},{}],828:[function(require,module,exports){/**\n * @fileoverview restrict values that can be used as Promise rejection reasons\n * @author Teddy Katz\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require using Error objects as Promise rejection reasons\",category:\"Best Practices\",recommended:false},fixable:null,schema:[{type:\"object\",properties:{allowEmptyReject:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var ALLOW_EMPTY_REJECT=context.options.length&&context.options[0].allowEmptyReject;//----------------------------------------------------------------------\n// Helpers\n//----------------------------------------------------------------------\n/**\n        * Checks the argument of a reject() or Promise.reject() CallExpression, and reports it if it can't be an Error\n        * @param {ASTNode} callExpression A CallExpression node which is used to reject a Promise\n        * @returns {void}\n        */function checkRejectCall(callExpression){if(!callExpression.arguments.length&&ALLOW_EMPTY_REJECT){return;}if(!callExpression.arguments.length||!astUtils.couldBeError(callExpression.arguments[0])||callExpression.arguments[0].type===\"Identifier\"&&callExpression.arguments[0].name===\"undefined\"){context.report({node:callExpression,message:\"Expected the Promise rejection reason to be an Error.\"});}}/**\n        * Determines whether a function call is a Promise.reject() call\n        * @param {ASTNode} node A CallExpression node\n        * @returns {boolean} `true` if the call is a Promise.reject() call\n        */function isPromiseRejectCall(node){return node.callee.type===\"MemberExpression\"&&node.callee.object.type===\"Identifier\"&&node.callee.object.name===\"Promise\"&&node.callee.property.type===\"Identifier\"&&node.callee.property.name===\"reject\";}//----------------------------------------------------------------------\n// Public\n//----------------------------------------------------------------------\nreturn{// Check `Promise.reject(value)` calls.\nCallExpression:function CallExpression(node){if(isPromiseRejectCall(node)){checkRejectCall(node);}},/*\n             * Check for `new Promise((resolve, reject) => {})`, and check for reject() calls.\n             * This function is run on \"NewExpression:exit\" instead of \"NewExpression\" to ensure that\n             * the nodes in the expression already have the `parent` property.\n             */\"NewExpression:exit\":function NewExpressionExit(node){if(node.callee.type===\"Identifier\"&&node.callee.name===\"Promise\"&&node.arguments.length&&astUtils.isFunction(node.arguments[0])&&node.arguments[0].params.length>1&&node.arguments[0].params[1].type===\"Identifier\"){context.getDeclaredVariables(node.arguments[0])/*\n                    * Find the first variable that matches the second parameter's name.\n                    * If the first parameter has the same name as the second parameter, then the variable will actually\n                    * be \"declared\" when the first parameter is evaluated, but then it will be immediately overwritten\n                    * by the second parameter. It's not possible for an expression with the variable to be evaluated before\n                    * the variable is overwritten, because functions with duplicate parameters cannot have destructuring or\n                    * default assignments in their parameter lists. Therefore, it's not necessary to explicitly account for\n                    * this case.\n                    */.find(function(variable){return variable.name===node.arguments[0].params[1].name;})// Get the references to that variable.\n.references// Only check the references that read the parameter's value.\n.filter(function(ref){return ref.isRead();})// Only check the references that are used as the callee in a function call, e.g. `reject(foo)`.\n.filter(function(ref){return ref.identifier.parent.type===\"CallExpression\"&&ref.identifier===ref.identifier.parent.callee;})// Check the argument of the function call to determine whether it's an Error.\n.forEach(function(ref){return checkRejectCall(ref.identifier.parent);});}}};}};},{\"../ast-utils\":605}],829:[function(require,module,exports){/**\n * @fileoverview Rule to suggest using \"Reflect\" api over Function/Object methods\n * @author Keith Cirkel <http://keithcirkel.co.uk>\n * @deprecated in ESLint v3.9.0\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `Reflect` methods where applicable\",category:\"ECMAScript 6\",recommended:false,replacedBy:[]},deprecated:true,schema:[{type:\"object\",properties:{exceptions:{type:\"array\",items:{enum:[\"apply\",\"call\",\"delete\",\"defineProperty\",\"getOwnPropertyDescriptor\",\"getPrototypeOf\",\"setPrototypeOf\",\"isExtensible\",\"getOwnPropertyNames\",\"preventExtensions\"]},uniqueItems:true}},additionalProperties:false}]},create:function create(context){var existingNames={apply:\"Function.prototype.apply\",call:\"Function.prototype.call\",defineProperty:\"Object.defineProperty\",getOwnPropertyDescriptor:\"Object.getOwnPropertyDescriptor\",getPrototypeOf:\"Object.getPrototypeOf\",setPrototypeOf:\"Object.setPrototypeOf\",isExtensible:\"Object.isExtensible\",getOwnPropertyNames:\"Object.getOwnPropertyNames\",preventExtensions:\"Object.preventExtensions\"};var reflectSubsitutes={apply:\"Reflect.apply\",call:\"Reflect.apply\",defineProperty:\"Reflect.defineProperty\",getOwnPropertyDescriptor:\"Reflect.getOwnPropertyDescriptor\",getPrototypeOf:\"Reflect.getPrototypeOf\",setPrototypeOf:\"Reflect.setPrototypeOf\",isExtensible:\"Reflect.isExtensible\",getOwnPropertyNames:\"Reflect.getOwnPropertyNames\",preventExtensions:\"Reflect.preventExtensions\"};var exceptions=(context.options[0]||{}).exceptions||[];/**\n         * Reports the Reflect violation based on the `existing` and `substitute`\n         * @param {Object} node The node that violates the rule.\n         * @param {string} existing The existing method name that has been used.\n         * @param {string} substitute The Reflect substitute that should be used.\n         * @returns {void}\n         */function report(node,existing,substitute){context.report({node:node,message:\"Avoid using {{existing}}, instead use {{substitute}}.\",data:{existing:existing,substitute:substitute}});}return{CallExpression:function CallExpression(node){var methodName=(node.callee.property||{}).name;var isReflectCall=(node.callee.object||{}).name===\"Reflect\";var hasReflectSubsitute=reflectSubsitutes.hasOwnProperty(methodName);var userConfiguredException=exceptions.indexOf(methodName)!==-1;if(hasReflectSubsitute&&!isReflectCall&&!userConfiguredException){report(node,existingNames[methodName],reflectSubsitutes[methodName]);}},UnaryExpression:function UnaryExpression(node){var isDeleteOperator=node.operator===\"delete\";var targetsIdentifier=node.argument.type===\"Identifier\";var userConfiguredException=exceptions.indexOf(\"delete\")!==-1;if(isDeleteOperator&&!targetsIdentifier&&!userConfiguredException){report(node,\"the delete keyword\",\"Reflect.deleteProperty\");}}};}};},{}],830:[function(require,module,exports){/**\n * @fileoverview Rule to\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Gets the variable object of `arguments` which is defined implicitly.\n * @param {escope.Scope} scope - A scope to get.\n * @returns {escope.Variable} The found variable object.\n */function getVariableOfArguments(scope){var variables=scope.variables;for(var i=0;i<variables.length;++i){var variable=variables[i];if(variable.name===\"arguments\"){// If there was a parameter which is named \"arguments\", the implicit \"arguments\" is not defined.\n// So does fast return with null.\nreturn variable.identifiers.length===0?variable:null;}}/* istanbul ignore next : unreachable */return null;}/**\n * Checks if the given reference is not normal member access.\n *\n * - arguments         .... true    // not member access\n * - arguments[i]      .... true    // computed member access\n * - arguments[0]      .... true    // computed member access\n * - arguments.length  .... false   // normal member access\n *\n * @param {escope.Reference} reference - The reference to check.\n * @returns {boolean} `true` if the reference is not normal member access.\n */function isNotNormalMemberAccess(reference){var id=reference.identifier;var parent=id.parent;return!(parent.type===\"MemberExpression\"&&parent.object===id&&!parent.computed);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require rest parameters instead of `arguments`\",category:\"ECMAScript 6\",recommended:false},schema:[]},create:function create(context){/**\n         * Reports a given reference.\n         *\n         * @param {escope.Reference} reference - A reference to report.\n         * @returns {void}\n         */function report(reference){context.report({node:reference.identifier,loc:reference.identifier.loc,message:\"Use the rest parameters instead of 'arguments'.\"});}/**\n         * Reports references of the implicit `arguments` variable if exist.\n         *\n         * @returns {void}\n         */function checkForArguments(){var argumentsVar=getVariableOfArguments(context.getScope());if(argumentsVar){argumentsVar.references.filter(isNotNormalMemberAccess).forEach(report);}}return{\"FunctionDeclaration:exit\":checkForArguments,\"FunctionExpression:exit\":checkForArguments};}};},{}],831:[function(require,module,exports){/**\n * @fileoverview A rule to suggest using of the spread operator instead of `.apply()`.\n * @author Toru Nagashima\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a node is a `.apply()` for variadic.\n * @param {ASTNode} node - A CallExpression node to check.\n * @returns {boolean} Whether or not the node is a `.apply()` for variadic.\n */function isVariadicApplyCalling(node){return node.callee.type===\"MemberExpression\"&&node.callee.property.type===\"Identifier\"&&node.callee.property.name===\"apply\"&&node.callee.computed===false&&node.arguments.length===2&&node.arguments[1].type!==\"ArrayExpression\"&&node.arguments[1].type!==\"SpreadElement\";}/**\n * Checks whether or not the tokens of two given nodes are same.\n * @param {ASTNode} left - A node 1 to compare.\n * @param {ASTNode} right - A node 2 to compare.\n * @param {SourceCode} sourceCode - The ESLint source code object.\n * @returns {boolean} the source code for the given node.\n */function equalTokens(left,right,sourceCode){var tokensL=sourceCode.getTokens(left);var tokensR=sourceCode.getTokens(right);if(tokensL.length!==tokensR.length){return false;}for(var i=0;i<tokensL.length;++i){if(tokensL[i].type!==tokensR[i].type||tokensL[i].value!==tokensR[i].value){return false;}}return true;}/**\n * Checks whether or not `thisArg` is not changed by `.apply()`.\n * @param {ASTNode|null} expectedThis - The node that is the owner of the applied function.\n * @param {ASTNode} thisArg - The node that is given to the first argument of the `.apply()`.\n * @param {RuleContext} context - The ESLint rule context object.\n * @returns {boolean} Whether or not `thisArg` is not changed by `.apply()`.\n */function isValidThisArg(expectedThis,thisArg,context){if(!expectedThis){return astUtils.isNullOrUndefined(thisArg);}return equalTokens(expectedThis,thisArg,context);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require spread operators instead of `.apply()`\",category:\"ECMAScript 6\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();return{CallExpression:function CallExpression(node){if(!isVariadicApplyCalling(node)){return;}var applied=node.callee.object;var expectedThis=applied.type===\"MemberExpression\"?applied.object:null;var thisArg=node.arguments[0];if(isValidThisArg(expectedThis,thisArg,sourceCode)){context.report({node:node,message:\"Use the spread operator instead of '.apply()'.\",fix:function fix(fixer){if(expectedThis&&expectedThis.type!==\"Identifier\"){// Don't fix cases where the `this` value could be a computed expression.\nreturn null;}var propertyDot=sourceCode.getFirstTokenBetween(applied,node.callee.property,function(token){return token.value===\".\";});return fixer.replaceTextRange([propertyDot.range[0],node.range[1]],\"(...\"+sourceCode.getText(node.arguments[1])+\")\");}});}}};}};},{\"../ast-utils\":605}],832:[function(require,module,exports){/**\n * @fileoverview A rule to suggest using template literals instead of string concatenation.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Checks whether or not a given node is a concatenation.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node is a concatenation.\n */function isConcatenation(node){return node.type===\"BinaryExpression\"&&node.operator===\"+\";}/**\n * Gets the top binary expression node for concatenation in parents of a given node.\n * @param {ASTNode} node - A node to get.\n * @returns {ASTNode} the top binary expression node in parents of a given node.\n */function getTopConcatBinaryExpression(node){while(isConcatenation(node.parent)){node=node.parent;}return node;}/**\n* Checks whether or not a given binary expression has string literals.\n* @param {ASTNode} node - A node to check.\n* @returns {boolean} `true` if the node has string literals.\n*/function hasStringLiteral(node){if(isConcatenation(node)){// `left` is deeper than `right` normally.\nreturn hasStringLiteral(node.right)||hasStringLiteral(node.left);}return astUtils.isStringLiteral(node);}/**\n * Checks whether or not a given binary expression has non string literals.\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node has non string literals.\n */function hasNonStringLiteral(node){if(isConcatenation(node)){// `left` is deeper than `right` normally.\nreturn hasNonStringLiteral(node.right)||hasNonStringLiteral(node.left);}return!astUtils.isStringLiteral(node);}/**\n* Determines whether a given node will start with a template curly expression (`${}`) when being converted to a template literal.\n* @param {ASTNode} node The node that will be fixed to a template literal\n* @returns {boolean} `true` if the node will start with a template curly.\n*/function startsWithTemplateCurly(node){if(node.type===\"BinaryExpression\"){return startsWithTemplateCurly(node.left);}if(node.type===\"TemplateLiteral\"){return node.expressions.length&&node.quasis.length&&node.quasis[0].start===node.quasis[0].end;}return node.type!==\"Literal\"||typeof node.value!==\"string\";}/**\n* Determines whether a given node end with a template curly expression (`${}`) when being converted to a template literal.\n* @param {ASTNode} node The node that will be fixed to a template literal\n* @returns {boolean} `true` if the node will end with a template curly.\n*/function endsWithTemplateCurly(node){if(node.type===\"BinaryExpression\"){return startsWithTemplateCurly(node.right);}if(node.type===\"TemplateLiteral\"){return node.expressions.length&&node.quasis.length&&node.quasis[node.quasis.length-1].start===node.quasis[node.quasis.length-1].end;}return node.type!==\"Literal\"||typeof node.value!==\"string\";}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require template literals instead of string concatenation\",category:\"ECMAScript 6\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();var done=(0,_create4.default)(null);/**\n        * Gets the non-token text between two nodes, ignoring any other tokens that appear between the two tokens.\n        * @param {ASTNode} node1 The first node\n        * @param {ASTNode} node2 The second node\n        * @returns {string} The text between the nodes, excluding other tokens\n        */function getTextBetween(node1,node2){var allTokens=[node1].concat(sourceCode.getTokensBetween(node1,node2)).concat(node2);var sourceText=sourceCode.getText();return allTokens.slice(0,-1).reduce(function(accumulator,token,index){return accumulator+sourceText.slice(token.range[1],allTokens[index+1].range[0]);},\"\");}/**\n        * Returns a template literal form of the given node.\n        * @param {ASTNode} currentNode A node that should be converted to a template literal\n        * @param {string} textBeforeNode Text that should appear before the node\n        * @param {string} textAfterNode Text that should appear after the node\n        * @returns {string} A string form of this node, represented as a template literal\n        */function getTemplateLiteral(currentNode,textBeforeNode,textAfterNode){if(currentNode.type===\"Literal\"&&typeof currentNode.value===\"string\"){// If the current node is a string literal, escape any instances of ${ or ` to prevent them from being interpreted\n// as a template placeholder. However, if the code already contains a backslash before the ${ or `\n// for some reason, don't add another backslash, because that would change the meaning of the code (it would cause\n// an actual backslash character to appear before the dollar sign).\nreturn\"`\"+currentNode.raw.slice(1,-1).replace(/\\\\*(\\${|`)/g,function(matched){if(matched.lastIndexOf(\"\\\\\")%2){return\"\\\\\"+matched;}return matched;// Unescape any quotes that appear in the original Literal that no longer need to be escaped.\n}).replace(new RegExp(\"\\\\\\\\\"+currentNode.raw[0],\"g\"),currentNode.raw[0])+\"`\";}if(currentNode.type===\"TemplateLiteral\"){return sourceCode.getText(currentNode);}if(isConcatenation(currentNode)&&hasStringLiteral(currentNode)&&hasNonStringLiteral(currentNode)){var plusSign=sourceCode.getFirstTokenBetween(currentNode.left,currentNode.right,function(token){return token.value===\"+\";});var textBeforePlus=getTextBetween(currentNode.left,plusSign);var textAfterPlus=getTextBetween(plusSign,currentNode.right);var leftEndsWithCurly=endsWithTemplateCurly(currentNode.left);var rightStartsWithCurly=startsWithTemplateCurly(currentNode.right);if(leftEndsWithCurly){// If the left side of the expression ends with a template curly, add the extra text to the end of the curly bracket.\n// `foo${bar}` /* comment */ + 'baz' --> `foo${bar /* comment */  }${baz}`\nreturn getTemplateLiteral(currentNode.left,textBeforeNode,textBeforePlus+textAfterPlus).slice(0,-1)+getTemplateLiteral(currentNode.right,null,textAfterNode).slice(1);}if(rightStartsWithCurly){// Otherwise, if the right side of the expression starts with a template curly, add the text there.\n// 'foo' /* comment */ + `${bar}baz` --> `foo${ /* comment */  bar}baz`\nreturn getTemplateLiteral(currentNode.left,textBeforeNode,null).slice(0,-1)+getTemplateLiteral(currentNode.right,textBeforePlus+textAfterPlus,textAfterNode).slice(1);}// Otherwise, these nodes should not be combined into a template curly, since there is nowhere to put\n// the text between them.\nreturn\"\"+getTemplateLiteral(currentNode.left,textBeforeNode,null)+textBeforePlus+\"+\"+textAfterPlus+getTemplateLiteral(currentNode.right,textAfterNode,null);}return\"`${\"+(textBeforeNode||\"\")+sourceCode.getText(currentNode)+(textAfterNode||\"\")+\"}`\";}/**\n         * Reports if a given node is string concatenation with non string literals.\n         *\n         * @param {ASTNode} node - A node to check.\n         * @returns {void}\n         */function checkForStringConcat(node){if(!astUtils.isStringLiteral(node)||!isConcatenation(node.parent)){return;}var topBinaryExpr=getTopConcatBinaryExpression(node.parent);// Checks whether or not this node had been checked already.\nif(done[topBinaryExpr.range[0]]){return;}done[topBinaryExpr.range[0]]=true;if(hasNonStringLiteral(topBinaryExpr)){context.report({node:topBinaryExpr,message:\"Unexpected string concatenation.\",fix:function fix(fixer){return fixer.replaceText(topBinaryExpr,getTemplateLiteral(topBinaryExpr,null,null));}});}}return{Program:function Program(){done=(0,_create4.default)(null);},Literal:checkForStringConcat,TemplateLiteral:checkForStringConcat};}};},{\"../ast-utils\":605}],833:[function(require,module,exports){/**\n * @fileoverview Rule to flag non-quoted property names in object literals.\n * @author Mathias Bynens <http://mathiasbynens.be/>\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar parser=require(\"babel-eslint\"),keywords=require(\"../util/keywords\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require quotes around object literal property names\",category:\"Stylistic Issues\",recommended:false},schema:{anyOf:[{type:\"array\",items:[{enum:[\"always\",\"as-needed\",\"consistent\",\"consistent-as-needed\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"always\",\"as-needed\",\"consistent\",\"consistent-as-needed\"]},{type:\"object\",properties:{keywords:{type:\"boolean\"},unnecessary:{type:\"boolean\"},numbers:{type:\"boolean\"}},additionalProperties:false}],minItems:0,maxItems:2}]},fixable:\"code\"},create:function create(context){var MODE=context.options[0],KEYWORDS=context.options[1]&&context.options[1].keywords,CHECK_UNNECESSARY=!context.options[1]||context.options[1].unnecessary!==false,NUMBERS=context.options[1]&&context.options[1].numbers,MESSAGE_UNNECESSARY=\"Unnecessarily quoted property '{{property}}' found.\",MESSAGE_UNQUOTED=\"Unquoted property '{{property}}' found.\",MESSAGE_NUMERIC=\"Unquoted number literal '{{property}}' used as key.\",MESSAGE_RESERVED=\"Unquoted reserved word '{{property}}' used as key.\",sourceCode=context.getSourceCode();/**\n         * Checks whether a certain string constitutes an ES3 token\n         * @param   {string} tokenStr - The string to be checked.\n         * @returns {boolean} `true` if it is an ES3 token.\n         */function isKeyword(tokenStr){return keywords.indexOf(tokenStr)>=0;}/**\n         * Checks if an espree-tokenized key has redundant quotes (i.e. whether quotes are unnecessary)\n         * @param   {string} rawKey The raw key value from the source\n         * @param   {espreeTokens} tokens The espree-tokenized node key\n         * @param   {boolean} [skipNumberLiterals=false] Indicates whether number literals should be checked\n         * @returns {boolean} Whether or not a key has redundant quotes.\n         * @private\n         */function areQuotesRedundant(rawKey,tokens,skipNumberLiterals){return tokens.length===1&&tokens[0].start===0&&tokens[0].end===rawKey.length&&([\"Identifier\",\"Keyword\",\"Null\",\"Boolean\"].indexOf(tokens[0].type)>=0||tokens[0].type===\"Numeric\"&&!skipNumberLiterals&&String(+tokens[0].value)===tokens[0].value);}/**\n        * Returns a string representation of a property node with quotes removed\n        * @param {ASTNode} key Key AST Node, which may or may not be quoted\n        * @returns {string} A replacement string for this property\n        */function getUnquotedKey(key){return key.type===\"Identifier\"?key.name:key.value;}/**\n        * Returns a string representation of a property node with quotes added\n        * @param {ASTNode} key Key AST Node, which may or may not be quoted\n        * @returns {string} A replacement string for this property\n        */function getQuotedKey(key){if(key.type===\"Literal\"&&typeof key.value===\"string\"){// If the key is already a string literal, don't replace the quotes with double quotes.\nreturn sourceCode.getText(key);}// Otherwise, the key is either an identifier or a number literal.\nreturn\"\\\"\"+(key.type===\"Identifier\"?key.name:key.value)+\"\\\"\";}/**\n         * Ensures that a property's key is quoted only when necessary\n         * @param   {ASTNode} node Property AST node\n         * @returns {void}\n         */function checkUnnecessaryQuotes(node){var key=node.key;var tokens=void 0;if(node.method||node.computed||node.shorthand){return;}if(key.type===\"Literal\"&&typeof key.value===\"string\"){try{tokens=parser.tokenize(key.value);}catch(e){return;}if(tokens.length!==1){return;}var isKeywordToken=isKeyword(tokens[0].value);if(isKeywordToken&&KEYWORDS){return;}if(CHECK_UNNECESSARY&&areQuotesRedundant(key.value,tokens,NUMBERS)){context.report({node:node,message:MESSAGE_UNNECESSARY,data:{property:key.value},fix:function fix(fixer){return fixer.replaceText(key,getUnquotedKey(key));}});}}else if(KEYWORDS&&key.type===\"Identifier\"&&isKeyword(key.name)){context.report({node:node,message:MESSAGE_RESERVED,data:{property:key.name},fix:function fix(fixer){return fixer.replaceText(key,getQuotedKey(key));}});}else if(NUMBERS&&key.type===\"Literal\"&&typeof key.value===\"number\"){context.report({node:node,message:MESSAGE_NUMERIC,data:{property:key.value},fix:function fix(fixer){return fixer.replaceText(key,getQuotedKey(key));}});}}/**\n         * Ensures that a property's key is quoted\n         * @param   {ASTNode} node Property AST node\n         * @returns {void}\n         */function checkOmittedQuotes(node){var key=node.key;if(!node.method&&!node.computed&&!node.shorthand&&!(key.type===\"Literal\"&&typeof key.value===\"string\")){context.report({node:node,message:MESSAGE_UNQUOTED,data:{property:key.name||key.value},fix:function fix(fixer){return fixer.replaceText(key,getQuotedKey(key));}});}}/**\n         * Ensures that an object's keys are consistently quoted, optionally checks for redundancy of quotes\n         * @param   {ASTNode} node Property AST node\n         * @param   {boolean} checkQuotesRedundancy Whether to check quotes' redundancy\n         * @returns {void}\n         */function checkConsistency(node,checkQuotesRedundancy){var quotedProps=[],unquotedProps=[];var keywordKeyName=null,necessaryQuotes=false;node.properties.forEach(function(property){var key=property.key;var tokens=void 0;if(!key||property.method||property.computed||property.shorthand){return;}if(key.type===\"Literal\"&&typeof key.value===\"string\"){quotedProps.push(property);if(checkQuotesRedundancy){try{tokens=parser.tokenize(key.value);}catch(e){necessaryQuotes=true;return;}necessaryQuotes=necessaryQuotes||!areQuotesRedundant(key.value,tokens)||KEYWORDS&&isKeyword(tokens[0].value);}}else if(KEYWORDS&&checkQuotesRedundancy&&key.type===\"Identifier\"&&isKeyword(key.name)){unquotedProps.push(property);necessaryQuotes=true;keywordKeyName=key.name;}else{unquotedProps.push(property);}});if(checkQuotesRedundancy&&quotedProps.length&&!necessaryQuotes){quotedProps.forEach(function(property){context.report({node:property,message:\"Properties shouldn't be quoted as all quotes are redundant.\",fix:function fix(fixer){return fixer.replaceText(property.key,getUnquotedKey(property.key));}});});}else if(unquotedProps.length&&keywordKeyName){unquotedProps.forEach(function(property){context.report({node:property,message:\"Properties should be quoted as '{{property}}' is a reserved word.\",data:{property:keywordKeyName},fix:function fix(fixer){return fixer.replaceText(property.key,getQuotedKey(property.key));}});});}else if(quotedProps.length&&unquotedProps.length){unquotedProps.forEach(function(property){context.report({node:property,message:\"Inconsistently quoted property '{{key}}' found.\",data:{key:property.key.name||property.key.value},fix:function fix(fixer){return fixer.replaceText(property.key,getQuotedKey(property.key));}});});}}return{Property:function Property(node){if(MODE===\"always\"||!MODE){checkOmittedQuotes(node);}if(MODE===\"as-needed\"){checkUnnecessaryQuotes(node);}},ObjectExpression:function ObjectExpression(node){if(MODE===\"consistent\"){checkConsistency(node,false);}if(MODE===\"consistent-as-needed\"){checkConsistency(node,true);}}};}};},{\"../util/keywords\":880,\"babel-eslint\":19}],834:[function(require,module,exports){/**\n * @fileoverview A rule to choose between single and double quote marks\n * @author Matt DuVall <http://www.mattduvall.com/>, Brandon Payton\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _templateObject=_taggedTemplateLiteral([\"(^|[^\\\\])(\\\\\\\\)*[\",\"]\"],[\"(^|[^\\\\\\\\])(\\\\\\\\\\\\\\\\)*[\",\"]\"]);function _taggedTemplateLiteral(strings,raw){return(0,_freeze2.default)((0,_defineProperties2.default)(strings,{raw:{value:(0,_freeze2.default)(raw)}}));}var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\nvar QUOTE_SETTINGS={double:{quote:\"\\\"\",alternateQuote:\"'\",description:\"doublequote\"},single:{quote:\"'\",alternateQuote:\"\\\"\",description:\"singlequote\"},backtick:{quote:\"`\",alternateQuote:\"\\\"\",description:\"backtick\"}};// An unescaped newline is a newline preceded by an even number of backslashes.\nvar UNESCAPED_LINEBREAK_PATTERN=new RegExp((0,_raw2.default)(_templateObject,(0,_from2.default)(astUtils.LINEBREAKS).join(\"\")));/**\n * Switches quoting of javascript string between ' \" and `\n * escaping and unescaping as necessary.\n * Only escaping of the minimal set of characters is changed.\n * Note: escaping of newlines when switching from backtick to other quotes is not handled.\n * @param {string} str - A string to convert.\n * @returns {string} The string with changed quotes.\n * @private\n */QUOTE_SETTINGS.double.convert=QUOTE_SETTINGS.single.convert=QUOTE_SETTINGS.backtick.convert=function(str){var newQuote=this.quote;var oldQuote=str[0];if(newQuote===oldQuote){return str;}return newQuote+str.slice(1,-1).replace(/\\\\(\\${|\\r\\n?|\\n|.)|[\"'`]|\\${|(\\r\\n?|\\n)/g,function(match,escaped,newline){if(escaped===oldQuote||oldQuote===\"`\"&&escaped===\"${\"){return escaped;// unescape\n}if(match===newQuote||newQuote===\"`\"&&match===\"${\"){return\"\\\\\"+match;// escape\n}if(newline&&oldQuote===\"`\"){return\"\\\\n\";// escape newlines\n}return match;})+newQuote;};var AVOID_ESCAPE=\"avoid-escape\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce the consistent use of either backticks, double, or single quotes\",category:\"Stylistic Issues\",recommended:false},fixable:\"code\",schema:[{enum:[\"single\",\"double\",\"backtick\"]},{anyOf:[{enum:[\"avoid-escape\"]},{type:\"object\",properties:{avoidEscape:{type:\"boolean\"},allowTemplateLiterals:{type:\"boolean\"}},additionalProperties:false}]}]},create:function create(context){var quoteOption=context.options[0],settings=QUOTE_SETTINGS[quoteOption||\"double\"],options=context.options[1],allowTemplateLiterals=options&&options.allowTemplateLiterals===true,sourceCode=context.getSourceCode();var avoidEscape=options&&options.avoidEscape===true;// deprecated\nif(options===AVOID_ESCAPE){avoidEscape=true;}/**\n         * Determines if a given node is part of JSX syntax.\n         *\n         * This function returns `true` in the following cases:\n         *\n         * - `<div className=\"foo\"></div>` ... If the literal is an attribute value, the parent of the literal is `JSXAttribute`.\n         * - `<div>foo</div>` ... If the literal is a text content, the parent of the literal is `JSXElement`.\n         *\n         * In particular, this function returns `false` in the following cases:\n         *\n         * - `<div className={\"foo\"}></div>`\n         * - `<div>{\"foo\"}</div>`\n         *\n         * In both cases, inside of the braces is handled as normal JavaScript.\n         * The braces are `JSXExpressionContainer` nodes.\n         *\n         * @param {ASTNode} node The Literal node to check.\n         * @returns {boolean} True if the node is a part of JSX, false if not.\n         * @private\n         */function isJSXLiteral(node){return node.parent.type===\"JSXAttribute\"||node.parent.type===\"JSXElement\";}/**\n         * Checks whether or not a given node is a directive.\n         * The directive is a `ExpressionStatement` which has only a string literal.\n         * @param {ASTNode} node - A node to check.\n         * @returns {boolean} Whether or not the node is a directive.\n         * @private\n         */function isDirective(node){return node.type===\"ExpressionStatement\"&&node.expression.type===\"Literal\"&&typeof node.expression.value===\"string\";}/**\n         * Checks whether or not a given node is a part of directive prologues.\n         * See also: http://www.ecma-international.org/ecma-262/6.0/#sec-directive-prologues-and-the-use-strict-directive\n         * @param {ASTNode} node - A node to check.\n         * @returns {boolean} Whether or not the node is a part of directive prologues.\n         * @private\n         */function isPartOfDirectivePrologue(node){var block=node.parent.parent;if(block.type!==\"Program\"&&(block.type!==\"BlockStatement\"||!astUtils.isFunction(block.parent))){return false;}// Check the node is at a prologue.\nfor(var i=0;i<block.body.length;++i){var statement=block.body[i];if(statement===node.parent){return true;}if(!isDirective(statement)){break;}}return false;}/**\n         * Checks whether or not a given node is allowed as non backtick.\n         * @param {ASTNode} node - A node to check.\n         * @returns {boolean} Whether or not the node is allowed as non backtick.\n         * @private\n         */function isAllowedAsNonBacktick(node){var parent=node.parent;switch(parent.type){// Directive Prologues.\ncase\"ExpressionStatement\":return isPartOfDirectivePrologue(node);// LiteralPropertyName.\ncase\"Property\":case\"MethodDefinition\":return parent.key===node&&!parent.computed;// ModuleSpecifier.\ncase\"ImportDeclaration\":case\"ExportNamedDeclaration\":case\"ExportAllDeclaration\":return parent.source===node;// Others don't allow.\ndefault:return false;}}return{Literal:function Literal(node){var val=node.value,rawVal=node.raw;var isValid=void 0;if(settings&&typeof val===\"string\"){isValid=quoteOption===\"backtick\"&&isAllowedAsNonBacktick(node)||isJSXLiteral(node)||astUtils.isSurroundedBy(rawVal,settings.quote);if(!isValid&&avoidEscape){isValid=astUtils.isSurroundedBy(rawVal,settings.alternateQuote)&&rawVal.indexOf(settings.quote)>=0;}if(!isValid){context.report({node:node,message:\"Strings must use {{description}}.\",data:{description:settings.description},fix:function fix(fixer){return fixer.replaceText(node,settings.convert(node.raw));}});}}},TemplateLiteral:function TemplateLiteral(node){// If backticks are expected or it's a tagged template, then this shouldn't throw an errors\nif(allowTemplateLiterals||quoteOption===\"backtick\"||node.parent.type===\"TaggedTemplateExpression\"&&node===node.parent.quasi){return;}// A warning should be produced if the template literal only has one TemplateElement, and has no unescaped newlines.\nvar shouldWarn=node.quasis.length===1&&!UNESCAPED_LINEBREAK_PATTERN.test(node.quasis[0].value.raw);if(shouldWarn){context.report({node:node,message:\"Strings must use {{description}}.\",data:{description:settings.description},fix:function fix(fixer){if(isPartOfDirectivePrologue(node)){/*\n                                 * TemplateLiterals in a directive prologue aren't actually directives, but if they're\n                                 * in the directive prologue, then fixing them might turn them into directives and change\n                                 * the behavior of the code.\n                                 */return null;}return fixer.replaceText(node,settings.convert(sourceCode.getText(node)));}});}}};}};},{\"../ast-utils\":605}],835:[function(require,module,exports){/**\n * @fileoverview Rule to flag use of parseInt without a radix argument\n * @author James Allardice\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar MODE_ALWAYS=\"always\",MODE_AS_NEEDED=\"as-needed\";/**\n * Checks whether a given variable is shadowed or not.\n *\n * @param {escope.Variable} variable - A variable to check.\n * @returns {boolean} `true` if the variable is shadowed.\n */function isShadowed(variable){return variable.defs.length>=1;}/**\n * Checks whether a given node is a MemberExpression of `parseInt` method or not.\n *\n * @param {ASTNode} node - A node to check.\n * @returns {boolean} `true` if the node is a MemberExpression of `parseInt`\n *      method.\n */function isParseIntMethod(node){return node.type===\"MemberExpression\"&&!node.computed&&node.property.type===\"Identifier\"&&node.property.name===\"parseInt\";}/**\n * Checks whether a given node is a valid value of radix or not.\n *\n * The following values are invalid.\n *\n * - A literal except numbers.\n * - undefined.\n *\n * @param {ASTNode} radix - A node of radix to check.\n * @returns {boolean} `true` if the node is valid.\n */function isValidRadix(radix){return!(radix.type===\"Literal\"&&typeof radix.value!==\"number\"||radix.type===\"Identifier\"&&radix.name===\"undefined\");}/**\n * Checks whether a given node is a default value of radix or not.\n *\n * @param {ASTNode} radix - A node of radix to check.\n * @returns {boolean} `true` if the node is the literal node of `10`.\n */function isDefaultRadix(radix){return radix.type===\"Literal\"&&radix.value===10;}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce the consistent use of the radix argument when using `parseInt()`\",category:\"Best Practices\",recommended:false},schema:[{enum:[\"always\",\"as-needed\"]}]},create:function create(context){var mode=context.options[0]||MODE_ALWAYS;/**\n         * Checks the arguments of a given CallExpression node and reports it if it\n         * offends this rule.\n         *\n         * @param {ASTNode} node - A CallExpression node to check.\n         * @returns {void}\n         */function checkArguments(node){var args=node.arguments;switch(args.length){case 0:context.report({node:node,message:\"Missing parameters.\"});break;case 1:if(mode===MODE_ALWAYS){context.report({node:node,message:\"Missing radix parameter.\"});}break;default:if(mode===MODE_AS_NEEDED&&isDefaultRadix(args[1])){context.report({node:node,message:\"Redundant radix parameter.\"});}else if(!isValidRadix(args[1])){context.report({node:node,message:\"Invalid radix parameter.\"});}break;}}return{\"Program:exit\":function ProgramExit(){var scope=context.getScope();var variable=void 0;// Check `parseInt()`\nvariable=astUtils.getVariableByName(scope,\"parseInt\");if(!isShadowed(variable)){variable.references.forEach(function(reference){var node=reference.identifier;if(astUtils.isCallee(node)){checkArguments(node.parent);}});}// Check `Number.parseInt()`\nvariable=astUtils.getVariableByName(scope,\"Number\");if(!isShadowed(variable)){variable.references.forEach(function(reference){var node=reference.identifier.parent;if(isParseIntMethod(node)&&astUtils.isCallee(node)){checkArguments(node.parent);}});}}};}};},{\"../ast-utils\":605}],836:[function(require,module,exports){/**\n * @fileoverview Rule to disallow async functions which have no `await` expression.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Capitalize the 1st letter of the given text.\n *\n * @param {string} text - The text to capitalize.\n * @returns {string} The text that the 1st letter was capitalized.\n */function capitalizeFirstLetter(text){return text[0].toUpperCase()+text.slice(1);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"disallow async functions which have no `await` expression\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var sourceCode=context.getSourceCode();var scopeInfo=null;/**\n         * Push the scope info object to the stack.\n         *\n         * @returns {void}\n         */function enterFunction(){scopeInfo={upper:scopeInfo,hasAwait:false};}/**\n         * Pop the top scope info object from the stack.\n         * Also, it reports the function if needed.\n         *\n         * @param {ASTNode} node - The node to report.\n         * @returns {void}\n         */function exitFunction(node){if(node.async&&!scopeInfo.hasAwait&&!astUtils.isEmptyFunction(node)){context.report({node:node,loc:astUtils.getFunctionHeadLoc(node,sourceCode),message:\"{{name}} has no 'await' expression.\",data:{name:capitalizeFirstLetter(astUtils.getFunctionNameWithKind(node))}});}scopeInfo=scopeInfo.upper;}return{FunctionDeclaration:enterFunction,FunctionExpression:enterFunction,ArrowFunctionExpression:enterFunction,\"FunctionDeclaration:exit\":exitFunction,\"FunctionExpression:exit\":exitFunction,\"ArrowFunctionExpression:exit\":exitFunction,AwaitExpression:function AwaitExpression(){scopeInfo.hasAwait=true;}};}};},{\"../ast-utils\":605}],837:[function(require,module,exports){/**\n * @fileoverview Rule to check for jsdoc presence.\n * @author Gyandeep Singh\n */\"use strict\";module.exports={meta:{docs:{description:\"require JSDoc comments\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{require:{type:\"object\",properties:{ClassDeclaration:{type:\"boolean\"},MethodDefinition:{type:\"boolean\"},FunctionDeclaration:{type:\"boolean\"},ArrowFunctionExpression:{type:\"boolean\"}},additionalProperties:false}},additionalProperties:false}]},create:function create(context){var source=context.getSourceCode();var DEFAULT_OPTIONS={FunctionDeclaration:true,MethodDefinition:false,ClassDeclaration:false};var options=(0,_assign4.default)(DEFAULT_OPTIONS,context.options[0]&&context.options[0].require||{});/**\n         * Report the error message\n         * @param {ASTNode} node node to report\n         * @returns {void}\n         */function report(node){context.report({node:node,message:\"Missing JSDoc comment.\"});}/**\n         * Check if the jsdoc comment is present for class methods\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */function checkClassMethodJsDoc(node){if(node.parent.type===\"MethodDefinition\"){var jsdocComment=source.getJSDocComment(node);if(!jsdocComment){report(node);}}}/**\n         * Check if the jsdoc comment is present or not.\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */function checkJsDoc(node){var jsdocComment=source.getJSDocComment(node);if(!jsdocComment){report(node);}}return{FunctionDeclaration:function FunctionDeclaration(node){if(options.FunctionDeclaration){checkJsDoc(node);}},FunctionExpression:function FunctionExpression(node){if(options.MethodDefinition){checkClassMethodJsDoc(node);}},ClassDeclaration:function ClassDeclaration(node){if(options.ClassDeclaration){checkJsDoc(node);}},ArrowFunctionExpression:function ArrowFunctionExpression(node){if(options.ArrowFunctionExpression&&node.parent.type===\"VariableDeclarator\"){checkJsDoc(node);}}};}};},{}],838:[function(require,module,exports){/**\n * @fileoverview Rule to flag the generator functions that does not have yield.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require generator functions to contain `yield`\",category:\"ECMAScript 6\",recommended:true},schema:[]},create:function create(context){var stack=[];/**\n         * If the node is a generator function, start counting `yield` keywords.\n         * @param {Node} node - A function node to check.\n         * @returns {void}\n         */function beginChecking(node){if(node.generator){stack.push(0);}}/**\n         * If the node is a generator function, end counting `yield` keywords, then\n         * reports result.\n         * @param {Node} node - A function node to check.\n         * @returns {void}\n         */function endChecking(node){if(!node.generator){return;}var countYield=stack.pop();if(countYield===0&&node.body.body.length>0){context.report({node:node,message:\"This generator function does not have 'yield'.\"});}}return{FunctionDeclaration:beginChecking,\"FunctionDeclaration:exit\":endChecking,FunctionExpression:beginChecking,\"FunctionExpression:exit\":endChecking,// Increases the count of `yield` keyword.\nYieldExpression:function YieldExpression(){/* istanbul ignore else */if(stack.length>0){stack[stack.length-1]+=1;}}};}};},{}],839:[function(require,module,exports){/**\n * @fileoverview Enforce spacing between rest and spread operators and their expressions.\n * @author Kai Cataldo\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce spacing between rest and spread operators and their expressions\",category:\"ECMAScript 6\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]}]},create:function create(context){var sourceCode=context.getSourceCode(),alwaysSpace=context.options[0]===\"always\";//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Checks whitespace between rest/spread operators and their expressions\n         * @param {ASTNode} node - The node to check\n         * @returns {void}\n         */function checkWhiteSpace(node){var operator=sourceCode.getFirstToken(node),nextToken=sourceCode.getTokenAfter(operator),hasWhitespace=sourceCode.isSpaceBetweenTokens(operator,nextToken);var type=void 0;switch(node.type){case\"SpreadElement\":type=\"spread\";break;case\"RestElement\":type=\"rest\";break;case\"ExperimentalSpreadProperty\":type=\"spread property\";break;case\"ExperimentalRestProperty\":type=\"rest property\";break;default:return;}if(alwaysSpace&&!hasWhitespace){context.report({node:node,loc:{line:operator.loc.end.line,column:operator.loc.end.column},message:\"Expected whitespace after {{type}} operator.\",data:{type:type},fix:function fix(fixer){return fixer.replaceTextRange([operator.range[1],nextToken.range[0]],\" \");}});}else if(!alwaysSpace&&hasWhitespace){context.report({node:node,loc:{line:operator.loc.end.line,column:operator.loc.end.column},message:\"Unexpected whitespace after {{type}} operator.\",data:{type:type},fix:function fix(fixer){return fixer.removeRange([operator.range[1],nextToken.range[0]]);}});}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{SpreadElement:checkWhiteSpace,RestElement:checkWhiteSpace,ExperimentalSpreadProperty:checkWhiteSpace,ExperimentalRestProperty:checkWhiteSpace};}};},{}],840:[function(require,module,exports){/**\n * @fileoverview Validates spacing before and after semicolon\n * @author Mathias Schreck\n */\"use strict\";var _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing before and after semicolons\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{before:{type:\"boolean\"},after:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var config=context.options[0],sourceCode=context.getSourceCode();var requireSpaceBefore=false,requireSpaceAfter=true;if((typeof config===\"undefined\"?\"undefined\":_typeof(config))===\"object\"){if(config.hasOwnProperty(\"before\")){requireSpaceBefore=config.before;}if(config.hasOwnProperty(\"after\")){requireSpaceAfter=config.after;}}/**\n         * Checks if a given token has leading whitespace.\n         * @param {Object} token The token to check.\n         * @returns {boolean} True if the given token has leading space, false if not.\n         */function hasLeadingSpace(token){var tokenBefore=sourceCode.getTokenBefore(token);return tokenBefore&&astUtils.isTokenOnSameLine(tokenBefore,token)&&sourceCode.isSpaceBetweenTokens(tokenBefore,token);}/**\n         * Checks if a given token has trailing whitespace.\n         * @param {Object} token The token to check.\n         * @returns {boolean} True if the given token has trailing space, false if not.\n         */function hasTrailingSpace(token){var tokenAfter=sourceCode.getTokenAfter(token);return tokenAfter&&astUtils.isTokenOnSameLine(token,tokenAfter)&&sourceCode.isSpaceBetweenTokens(token,tokenAfter);}/**\n         * Checks if the given token is the last token in its line.\n         * @param {Token} token The token to check.\n         * @returns {boolean} Whether or not the token is the last in its line.\n         */function isLastTokenInCurrentLine(token){var tokenAfter=sourceCode.getTokenAfter(token);return!(tokenAfter&&astUtils.isTokenOnSameLine(token,tokenAfter));}/**\n         * Checks if the given token is the first token in its line\n         * @param {Token} token The token to check.\n         * @returns {boolean} Whether or not the token is the first in its line.\n         */function isFirstTokenInCurrentLine(token){var tokenBefore=sourceCode.getTokenBefore(token);return!(tokenBefore&&astUtils.isTokenOnSameLine(token,tokenBefore));}/**\n         * Checks if the next token of a given token is a closing parenthesis.\n         * @param {Token} token The token to check.\n         * @returns {boolean} Whether or not the next token of a given token is a closing parenthesis.\n         */function isBeforeClosingParen(token){var nextToken=sourceCode.getTokenAfter(token);return nextToken&&astUtils.isClosingBraceToken(nextToken)||astUtils.isClosingParenToken(nextToken);}/**\n         * Reports if the given token has invalid spacing.\n         * @param {Token} token The semicolon token to check.\n         * @param {ASTNode} node The corresponding node of the token.\n         * @returns {void}\n         */function checkSemicolonSpacing(token,node){if(astUtils.isSemicolonToken(token)){var location=token.loc.start;if(hasLeadingSpace(token)){if(!requireSpaceBefore){context.report({node:node,loc:location,message:\"Unexpected whitespace before semicolon.\",fix:function fix(fixer){var tokenBefore=sourceCode.getTokenBefore(token);return fixer.removeRange([tokenBefore.range[1],token.range[0]]);}});}}else{if(requireSpaceBefore){context.report({node:node,loc:location,message:\"Missing whitespace before semicolon.\",fix:function fix(fixer){return fixer.insertTextBefore(token,\" \");}});}}if(!isFirstTokenInCurrentLine(token)&&!isLastTokenInCurrentLine(token)&&!isBeforeClosingParen(token)){if(hasTrailingSpace(token)){if(!requireSpaceAfter){context.report({node:node,loc:location,message:\"Unexpected whitespace after semicolon.\",fix:function fix(fixer){var tokenAfter=sourceCode.getTokenAfter(token);return fixer.removeRange([token.range[1],tokenAfter.range[0]]);}});}}else{if(requireSpaceAfter){context.report({node:node,loc:location,message:\"Missing whitespace after semicolon.\",fix:function fix(fixer){return fixer.insertTextAfter(token,\" \");}});}}}}}/**\n         * Checks the spacing of the semicolon with the assumption that the last token is the semicolon.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */function checkNode(node){var token=sourceCode.getLastToken(node);checkSemicolonSpacing(token,node);}return{VariableDeclaration:checkNode,ExpressionStatement:checkNode,BreakStatement:checkNode,ContinueStatement:checkNode,DebuggerStatement:checkNode,ReturnStatement:checkNode,ThrowStatement:checkNode,ImportDeclaration:checkNode,ExportNamedDeclaration:checkNode,ExportAllDeclaration:checkNode,ExportDefaultDeclaration:checkNode,ForStatement:function ForStatement(node){if(node.init){checkSemicolonSpacing(sourceCode.getTokenAfter(node.init),node);}if(node.test){checkSemicolonSpacing(sourceCode.getTokenAfter(node.test),node);}}};}};},{\"../ast-utils\":605}],841:[function(require,module,exports){/**\n * @fileoverview Rule to flag missing semicolons.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar FixTracker=require(\"../util/fix-tracker\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow semicolons instead of ASI\",category:\"Stylistic Issues\",recommended:false},fixable:\"code\",schema:{anyOf:[{type:\"array\",items:[{enum:[\"never\"]}],minItems:0,maxItems:1},{type:\"array\",items:[{enum:[\"always\"]},{type:\"object\",properties:{omitLastInOneLineBlock:{type:\"boolean\"}},additionalProperties:false}],minItems:0,maxItems:2}]}},create:function create(context){var OPT_OUT_PATTERN=/^[-[(/+`]/;// One of [(/+-`\nvar options=context.options[1];var never=context.options[0]===\"never\",exceptOneLine=options&&options.omitLastInOneLineBlock===true,sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * Reports a semicolon error with appropriate location and message.\n         * @param {ASTNode} node The node with an extra or missing semicolon.\n         * @param {boolean} missing True if the semicolon is missing.\n         * @returns {void}\n         */function report(node,missing){var lastToken=sourceCode.getLastToken(node);var message=void 0,fix=void 0,loc=lastToken.loc;if(!missing){message=\"Missing semicolon.\";loc=loc.end;fix=function fix(fixer){return fixer.insertTextAfter(lastToken,\";\");};}else{message=\"Extra semicolon.\";loc=loc.start;fix=function fix(fixer){// Expand the replacement range to include the surrounding\n// tokens to avoid conflicting with no-extra-semi.\n// https://github.com/eslint/eslint/issues/7928\nreturn new FixTracker(fixer,sourceCode).retainSurroundingTokens(lastToken).remove(lastToken);};}context.report({node:node,loc:loc,message:message,fix:fix});}/**\n         * Check if a semicolon is unnecessary, only true if:\n         *   - next token is on a new line and is not one of the opt-out tokens\n         *   - next token is a valid statement divider\n         * @param {Token} lastToken last token of current node.\n         * @returns {boolean} whether the semicolon is unnecessary.\n         */function isUnnecessarySemicolon(lastToken){if(!astUtils.isSemicolonToken(lastToken)){return false;}var nextToken=sourceCode.getTokenAfter(lastToken);if(!nextToken){return true;}var lastTokenLine=lastToken.loc.end.line;var nextTokenLine=nextToken.loc.start.line;var isOptOutToken=OPT_OUT_PATTERN.test(nextToken.value)&&nextToken.value!==\"++\"&&nextToken.value!==\"--\";var isDivider=astUtils.isClosingBraceToken(nextToken)||astUtils.isSemicolonToken(nextToken);return lastTokenLine!==nextTokenLine&&!isOptOutToken||isDivider;}/**\n         * Checks a node to see if it's in a one-liner block statement.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} whether the node is in a one-liner block statement.\n         */function isOneLinerBlock(node){var nextToken=sourceCode.getTokenAfter(node);if(!nextToken||nextToken.value!==\"}\"){return false;}var parent=node.parent;return parent&&parent.type===\"BlockStatement\"&&parent.loc.start.line===parent.loc.end.line;}/**\n         * Checks a node to see if it's followed by a semicolon.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */function checkForSemicolon(node){var lastToken=sourceCode.getLastToken(node);if(never){if(isUnnecessarySemicolon(lastToken)){report(node,true);}}else{if(!astUtils.isSemicolonToken(lastToken)){if(!exceptOneLine||!isOneLinerBlock(node)){report(node);}}else{if(exceptOneLine&&isOneLinerBlock(node)){report(node,true);}}}}/**\n         * Checks to see if there's a semicolon after a variable declaration.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */function checkForSemicolonForVariableDeclaration(node){var ancestors=context.getAncestors(),parentIndex=ancestors.length-1,parent=ancestors[parentIndex];if((parent.type!==\"ForStatement\"||parent.init!==node)&&(!/^For(?:In|Of)Statement/.test(parent.type)||parent.left!==node)){checkForSemicolon(node);}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{VariableDeclaration:checkForSemicolonForVariableDeclaration,ExpressionStatement:checkForSemicolon,ReturnStatement:checkForSemicolon,ThrowStatement:checkForSemicolon,DoWhileStatement:checkForSemicolon,DebuggerStatement:checkForSemicolon,BreakStatement:checkForSemicolon,ContinueStatement:checkForSemicolon,ImportDeclaration:checkForSemicolon,ExportAllDeclaration:checkForSemicolon,ExportNamedDeclaration:function ExportNamedDeclaration(node){if(!node.declaration){checkForSemicolon(node);}},ExportDefaultDeclaration:function ExportDefaultDeclaration(node){if(!/(?:Class|Function)Declaration/.test(node.declaration.type)){checkForSemicolon(node);}}};}};},{\"../ast-utils\":605,\"../util/fix-tracker\":879}],842:[function(require,module,exports){/**\n * @fileoverview Rule to require sorting of import declarations\n * @author Christian Schuller\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce sorted import declarations within modules\",category:\"ECMAScript 6\",recommended:false},schema:[{type:\"object\",properties:{ignoreCase:{type:\"boolean\"},memberSyntaxSortOrder:{type:\"array\",items:{enum:[\"none\",\"all\",\"multiple\",\"single\"]},uniqueItems:true,minItems:4,maxItems:4},ignoreMemberSort:{type:\"boolean\"}},additionalProperties:false}],fixable:\"code\"},create:function create(context){var configuration=context.options[0]||{},ignoreCase=configuration.ignoreCase||false,ignoreMemberSort=configuration.ignoreMemberSort||false,memberSyntaxSortOrder=configuration.memberSyntaxSortOrder||[\"none\",\"all\",\"multiple\",\"single\"],sourceCode=context.getSourceCode();var previousDeclaration=null;/**\n         * Gets the used member syntax style.\n         *\n         * import \"my-module.js\" --> none\n         * import * as myModule from \"my-module.js\" --> all\n         * import {myMember} from \"my-module.js\" --> single\n         * import {foo, bar} from  \"my-module.js\" --> multiple\n         *\n         * @param {ASTNode} node - the ImportDeclaration node.\n         * @returns {string} used member parameter style, [\"all\", \"multiple\", \"single\"]\n         */function usedMemberSyntax(node){if(node.specifiers.length===0){return\"none\";}else if(node.specifiers[0].type===\"ImportNamespaceSpecifier\"){return\"all\";}else if(node.specifiers.length===1){return\"single\";}return\"multiple\";}/**\n         * Gets the group by member parameter index for given declaration.\n         * @param {ASTNode} node - the ImportDeclaration node.\n         * @returns {number} the declaration group by member index.\n         */function getMemberParameterGroupIndex(node){return memberSyntaxSortOrder.indexOf(usedMemberSyntax(node));}/**\n         * Gets the local name of the first imported module.\n         * @param {ASTNode} node - the ImportDeclaration node.\n         * @returns {?string} the local name of the first imported module.\n         */function getFirstLocalMemberName(node){if(node.specifiers[0]){return node.specifiers[0].local.name;}return null;}return{ImportDeclaration:function ImportDeclaration(node){if(previousDeclaration){var currentMemberSyntaxGroupIndex=getMemberParameterGroupIndex(node),previousMemberSyntaxGroupIndex=getMemberParameterGroupIndex(previousDeclaration);var currentLocalMemberName=getFirstLocalMemberName(node),previousLocalMemberName=getFirstLocalMemberName(previousDeclaration);if(ignoreCase){previousLocalMemberName=previousLocalMemberName&&previousLocalMemberName.toLowerCase();currentLocalMemberName=currentLocalMemberName&&currentLocalMemberName.toLowerCase();}// When the current declaration uses a different member syntax,\n// then check if the ordering is correct.\n// Otherwise, make a default string compare (like rule sort-vars to be consistent) of the first used local member name.\nif(currentMemberSyntaxGroupIndex!==previousMemberSyntaxGroupIndex){if(currentMemberSyntaxGroupIndex<previousMemberSyntaxGroupIndex){context.report({node:node,message:\"Expected '{{syntaxA}}' syntax before '{{syntaxB}}' syntax.\",data:{syntaxA:memberSyntaxSortOrder[currentMemberSyntaxGroupIndex],syntaxB:memberSyntaxSortOrder[previousMemberSyntaxGroupIndex]}});}}else{if(previousLocalMemberName&&currentLocalMemberName&&currentLocalMemberName<previousLocalMemberName){context.report({node:node,message:\"Imports should be sorted alphabetically.\"});}}}if(!ignoreMemberSort){var importSpecifiers=node.specifiers.filter(function(specifier){return specifier.type===\"ImportSpecifier\";});var getSortableName=ignoreCase?function(specifier){return specifier.local.name.toLowerCase();}:function(specifier){return specifier.local.name;};var firstUnsortedIndex=importSpecifiers.map(getSortableName).findIndex(function(name,index,array){return array[index-1]>name;});if(firstUnsortedIndex!==-1){context.report({node:importSpecifiers[firstUnsortedIndex],message:\"Member '{{memberName}}' of the import declaration should be sorted alphabetically.\",data:{memberName:importSpecifiers[firstUnsortedIndex].local.name},fix:function fix(fixer){if(importSpecifiers.some(function(specifier){return sourceCode.getComments(specifier).leading.length||sourceCode.getComments(specifier).trailing.length;})){// If there are comments in the ImportSpecifier list, don't rearrange the specifiers.\nreturn null;}return fixer.replaceTextRange([importSpecifiers[0].range[0],importSpecifiers[importSpecifiers.length-1].range[1]],importSpecifiers// Clone the importSpecifiers array to avoid mutating it\n.slice()// Sort the array into the desired order\n.sort(function(specifierA,specifierB){var aName=getSortableName(specifierA);var bName=getSortableName(specifierB);return aName>bName?1:-1;})// Build a string out of the sorted list of import specifiers and the text between the originals\n.reduce(function(sourceText,specifier,index){var textAfterSpecifier=index===importSpecifiers.length-1?\"\":sourceCode.getText().slice(importSpecifiers[index].range[1],importSpecifiers[index+1].range[0]);return sourceText+sourceCode.getText(specifier)+textAfterSpecifier;},\"\"));}});}}previousDeclaration=node;}};}};},{}],843:[function(require,module,exports){/**\n * @fileoverview Rule to require object keys to be sorted\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\"),naturalCompare=require(\"natural-compare\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Gets the property name of the given `Property` node.\n *\n * - If the property's key is an `Identifier` node, this returns the key's name\n *   whether it's a computed property or not.\n * - If the property has a static name, this returns the static name.\n * - Otherwise, this returns null.\n *\n * @param {ASTNode} node - The `Property` node to get.\n * @returns {string|null} The property name or null.\n * @private\n */function getPropertyName(node){return astUtils.getStaticPropertyName(node)||node.key.name||null;}/**\n * Functions which check that the given 2 names are in specific order.\n *\n * Postfix `I` is meant insensitive.\n * Postfix `N` is meant natual.\n *\n * @private\n */var isValidOrders={asc:function asc(a,b){return a<=b;},ascI:function ascI(a,b){return a.toLowerCase()<=b.toLowerCase();},ascN:function ascN(a,b){return naturalCompare(a,b)<=0;},ascIN:function ascIN(a,b){return naturalCompare(a.toLowerCase(),b.toLowerCase())<=0;},desc:function desc(a,b){return isValidOrders.asc(b,a);},descI:function descI(a,b){return isValidOrders.ascI(b,a);},descN:function descN(a,b){return isValidOrders.ascN(b,a);},descIN:function descIN(a,b){return isValidOrders.ascIN(b,a);}};//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require object keys to be sorted\",category:\"Stylistic Issues\",recommended:false},schema:[{enum:[\"asc\",\"desc\"]},{type:\"object\",properties:{caseSensitive:{type:\"boolean\"},natural:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){// Parse options.\nvar order=context.options[0]||\"asc\";var options=context.options[1];var insensitive=(options&&options.caseSensitive)===false;var natual=Boolean(options&&options.natural);var isValidOrder=isValidOrders[order+(insensitive?\"I\":\"\")+(natual?\"N\":\"\")];// The stack to save the previous property's name for each object literals.\nvar stack=null;return{ObjectExpression:function ObjectExpression(){stack={upper:stack,prevName:null};},\"ObjectExpression:exit\":function ObjectExpressionExit(){stack=stack.upper;},Property:function Property(node){if(node.parent.type===\"ObjectPattern\"){return;}var prevName=stack.prevName;var thisName=getPropertyName(node);stack.prevName=thisName||prevName;if(!prevName||!thisName){return;}if(!isValidOrder(prevName,thisName)){context.report({node:node,loc:node.key.loc,message:\"Expected object keys to be in {{natual}}{{insensitive}}{{order}}ending order. '{{thisName}}' should be before '{{prevName}}'.\",data:{thisName:thisName,prevName:prevName,order:order,insensitive:insensitive?\"insensitive \":\"\",natual:natual?\"natural \":\"\"}});}}};}};},{\"../ast-utils\":605,\"natural-compare\":578}],844:[function(require,module,exports){/**\n * @fileoverview Rule to require sorting of variables within a single Variable Declaration block\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require variables within the same declaration block to be sorted\",category:\"Stylistic Issues\",recommended:false},schema:[{type:\"object\",properties:{ignoreCase:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var configuration=context.options[0]||{},ignoreCase=configuration.ignoreCase||false;return{VariableDeclaration:function VariableDeclaration(node){var idDeclarations=node.declarations.filter(function(decl){return decl.id.type===\"Identifier\";});idDeclarations.slice(1).reduce(function(memo,decl){var lastVariableName=memo.id.name,currenVariableName=decl.id.name;if(ignoreCase){lastVariableName=lastVariableName.toLowerCase();currenVariableName=currenVariableName.toLowerCase();}if(currenVariableName<lastVariableName){context.report({node:decl,message:\"Variables within the same declaration block should be sorted alphabetically.\"});return memo;}return decl;},idDeclarations[0]);}};}};},{}],845:[function(require,module,exports){/**\n * @fileoverview A rule to ensure whitespace before blocks.\n * @author Mathias Schreck <https://github.com/lo1tuma>\n */\"use strict\";var _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing before blocks\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{oneOf:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{keywords:{enum:[\"always\",\"never\"]},functions:{enum:[\"always\",\"never\"]},classes:{enum:[\"always\",\"never\"]}},additionalProperties:false}]}]},create:function create(context){var config=context.options[0],sourceCode=context.getSourceCode();var checkFunctions=true,checkKeywords=true,checkClasses=true;if((typeof config===\"undefined\"?\"undefined\":_typeof(config))===\"object\"){checkFunctions=config.functions!==\"never\";checkKeywords=config.keywords!==\"never\";checkClasses=config.classes!==\"never\";}else if(config===\"never\"){checkFunctions=false;checkKeywords=false;checkClasses=false;}/**\n         * Checks whether or not a given token is an arrow operator (=>) or a keyword\n         * in order to avoid to conflict with `arrow-spacing` and `keyword-spacing`.\n         *\n         * @param {Token} token - A token to check.\n         * @returns {boolean} `true` if the token is an arrow operator.\n         */function isConflicted(token){return token.type===\"Punctuator\"&&token.value===\"=>\"||token.type===\"Keyword\";}/**\n         * Checks the given BlockStatement node has a preceding space if it doesn’t start on a new line.\n         * @param {ASTNode|Token} node The AST node of a BlockStatement.\n         * @returns {void} undefined.\n         */function checkPrecedingSpace(node){var precedingToken=sourceCode.getTokenBefore(node);var requireSpace=void 0;if(precedingToken&&!isConflicted(precedingToken)&&astUtils.isTokenOnSameLine(precedingToken,node)){var hasSpace=sourceCode.isSpaceBetweenTokens(precedingToken,node);var parent=context.getAncestors().pop();if(parent.type===\"FunctionExpression\"||parent.type===\"FunctionDeclaration\"){requireSpace=checkFunctions;}else if(node.type===\"ClassBody\"){requireSpace=checkClasses;}else{requireSpace=checkKeywords;}if(requireSpace){if(!hasSpace){context.report({node:node,message:\"Missing space before opening brace.\",fix:function fix(fixer){return fixer.insertTextBefore(node,\" \");}});}}else{if(hasSpace){context.report({node:node,message:\"Unexpected space before opening brace.\",fix:function fix(fixer){return fixer.removeRange([precedingToken.range[1],node.range[0]]);}});}}}}/**\n         * Checks if the CaseBlock of an given SwitchStatement node has a preceding space.\n         * @param {ASTNode} node The node of a SwitchStatement.\n         * @returns {void} undefined.\n         */function checkSpaceBeforeCaseBlock(node){var cases=node.cases;var openingBrace=void 0;if(cases.length>0){openingBrace=sourceCode.getTokenBefore(cases[0]);}else{openingBrace=sourceCode.getLastToken(node,1);}checkPrecedingSpace(openingBrace);}return{BlockStatement:checkPrecedingSpace,ClassBody:checkPrecedingSpace,SwitchStatement:checkSpaceBeforeCaseBlock};}};},{\"../ast-utils\":605}],846:[function(require,module,exports){/**\n * @fileoverview Rule to validate spacing before function paren.\n * @author Mathias Schreck <https://github.com/lo1tuma>\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing before `function` definition opening parenthesis\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{oneOf:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{anonymous:{enum:[\"always\",\"never\",\"ignore\"]},named:{enum:[\"always\",\"never\",\"ignore\"]},asyncArrow:{enum:[\"always\",\"never\",\"ignore\"]}},additionalProperties:false}]}]},create:function create(context){var sourceCode=context.getSourceCode();var baseConfig=typeof context.options[0]===\"string\"?context.options[0]:\"always\";var overrideConfig=_typeof(context.options[0])===\"object\"?context.options[0]:{};/**\n         * Determines whether a function has a name.\n         * @param {ASTNode} node The function node.\n         * @returns {boolean} Whether the function has a name.\n         */function isNamedFunction(node){if(node.id){return true;}var parent=node.parent;return parent.type===\"MethodDefinition\"||parent.type===\"Property\"&&(parent.kind===\"get\"||parent.kind===\"set\"||parent.method);}/**\n         * Gets the config for a given function\n         * @param {ASTNode} node The function node\n         * @returns {string} \"always\", \"never\", or \"ignore\"\n         */function getConfigForFunction(node){if(node.type===\"ArrowFunctionExpression\"){// Always ignore non-async functions and arrow functions without parens, e.g. async foo => bar\nif(node.async&&astUtils.isOpeningParenToken(sourceCode.getFirstToken(node,{skip:1}))){// For backwards compatibility, the base config does not apply to async arrow functions.\nreturn overrideConfig.asyncArrow||\"ignore\";}}else if(isNamedFunction(node)){return overrideConfig.named||baseConfig;// `generator-star-spacing` should warn anonymous generators. E.g. `function* () {}`\n}else if(!node.generator){return overrideConfig.anonymous||baseConfig;}return\"ignore\";}/**\n         * Checks the parens of a function node\n         * @param {ASTNode} node A function node\n         * @returns {void}\n         */function checkFunction(node){var functionConfig=getConfigForFunction(node);if(functionConfig===\"ignore\"){return;}var rightToken=sourceCode.getFirstToken(node,astUtils.isOpeningParenToken);var leftToken=sourceCode.getTokenBefore(rightToken);var hasSpacing=sourceCode.isSpaceBetweenTokens(leftToken,rightToken);if(hasSpacing&&functionConfig===\"never\"){context.report({node:node,loc:leftToken.loc.end,message:\"Unexpected space before function parentheses.\",fix:function fix(fixer){return fixer.removeRange([leftToken.range[1],rightToken.range[0]]);}});}else if(!hasSpacing&&functionConfig===\"always\"){context.report({node:node,loc:leftToken.loc.end,message:\"Missing space before function parentheses.\",fix:function fix(fixer){return fixer.insertTextAfter(leftToken,\" \");}});}}return{ArrowFunctionExpression:checkFunction,FunctionDeclaration:checkFunction,FunctionExpression:checkFunction};}};},{\"../ast-utils\":605}],847:[function(require,module,exports){/**\n * @fileoverview Disallows or enforces spaces inside of parentheses.\n * @author Jonathan Rajavuori\n */\"use strict\";var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing inside parentheses\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{exceptions:{type:\"array\",items:{enum:[\"{}\",\"[]\",\"()\",\"empty\"]},uniqueItems:true}},additionalProperties:false}]},create:function create(context){var MISSING_SPACE_MESSAGE=\"There must be a space inside this paren.\",REJECTED_SPACE_MESSAGE=\"There should be no spaces inside this paren.\",ALWAYS=context.options[0]===\"always\",exceptionsArrayOptions=context.options.length===2?context.options[1].exceptions:[],options={};var exceptions=void 0;if(exceptionsArrayOptions.length){options.braceException=exceptionsArrayOptions.indexOf(\"{}\")!==-1;options.bracketException=exceptionsArrayOptions.indexOf(\"[]\")!==-1;options.parenException=exceptionsArrayOptions.indexOf(\"()\")!==-1;options.empty=exceptionsArrayOptions.indexOf(\"empty\")!==-1;}/**\n         * Produces an object with the opener and closer exception values\n         * @param {Object} opts The exception options\n         * @returns {Object} `openers` and `closers` exception values\n         * @private\n         */function getExceptions(){var openers=[],closers=[];if(options.braceException){openers.push(\"{\");closers.push(\"}\");}if(options.bracketException){openers.push(\"[\");closers.push(\"]\");}if(options.parenException){openers.push(\"(\");closers.push(\")\");}if(options.empty){openers.push(\")\");closers.push(\"(\");}return{openers:openers,closers:closers};}//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\nvar sourceCode=context.getSourceCode();/**\n         * Determines if a token is one of the exceptions for the opener paren\n         * @param {Object} token The token to check\n         * @returns {boolean} True if the token is one of the exceptions for the opener paren\n         */function isOpenerException(token){return token.type===\"Punctuator\"&&exceptions.openers.indexOf(token.value)>=0;}/**\n         * Determines if a token is one of the exceptions for the closer paren\n         * @param {Object} token The token to check\n         * @returns {boolean} True if the token is one of the exceptions for the closer paren\n         */function isCloserException(token){return token.type===\"Punctuator\"&&exceptions.closers.indexOf(token.value)>=0;}/**\n         * Determines if an opener paren should have a missing space after it\n         * @param {Object} left The paren token\n         * @param {Object} right The token after it\n         * @returns {boolean} True if the paren should have a space\n         */function shouldOpenerHaveSpace(left,right){if(sourceCode.isSpaceBetweenTokens(left,right)){return false;}if(ALWAYS){if(astUtils.isClosingParenToken(right)){return false;}return!isOpenerException(right);}return isOpenerException(right);}/**\n         * Determines if an closer paren should have a missing space after it\n         * @param {Object} left The token before the paren\n         * @param {Object} right The paren token\n         * @returns {boolean} True if the paren should have a space\n         */function shouldCloserHaveSpace(left,right){if(astUtils.isOpeningParenToken(left)){return false;}if(sourceCode.isSpaceBetweenTokens(left,right)){return false;}if(ALWAYS){return!isCloserException(left);}return isCloserException(left);}/**\n         * Determines if an opener paren should not have an existing space after it\n         * @param {Object} left The paren token\n         * @param {Object} right The token after it\n         * @returns {boolean} True if the paren should reject the space\n         */function shouldOpenerRejectSpace(left,right){if(right.type===\"Line\"){return false;}if(!astUtils.isTokenOnSameLine(left,right)){return false;}if(!sourceCode.isSpaceBetweenTokens(left,right)){return false;}if(ALWAYS){return isOpenerException(right);}return!isOpenerException(right);}/**\n         * Determines if an closer paren should not have an existing space after it\n         * @param {Object} left The token before the paren\n         * @param {Object} right The paren token\n         * @returns {boolean} True if the paren should reject the space\n         */function shouldCloserRejectSpace(left,right){if(astUtils.isOpeningParenToken(left)){return false;}if(!astUtils.isTokenOnSameLine(left,right)){return false;}if(!sourceCode.isSpaceBetweenTokens(left,right)){return false;}if(ALWAYS){return isCloserException(left);}return!isCloserException(left);}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Program:function checkParenSpaces(node){exceptions=getExceptions();var tokens=sourceCode.tokensAndComments;tokens.forEach(function(token,i){var prevToken=tokens[i-1];var nextToken=tokens[i+1];if(!astUtils.isOpeningParenToken(token)&&!astUtils.isClosingParenToken(token)){return;}if(token.value===\"(\"&&shouldOpenerHaveSpace(token,nextToken)){context.report({node:node,loc:token.loc.start,message:MISSING_SPACE_MESSAGE,fix:function fix(fixer){return fixer.insertTextAfter(token,\" \");}});}else if(token.value===\"(\"&&shouldOpenerRejectSpace(token,nextToken)){context.report({node:node,loc:token.loc.start,message:REJECTED_SPACE_MESSAGE,fix:function fix(fixer){return fixer.removeRange([token.range[1],nextToken.range[0]]);}});}else if(token.value===\")\"&&shouldCloserHaveSpace(prevToken,token)){// context.report(node, token.loc.start, MISSING_SPACE_MESSAGE);\ncontext.report({node:node,loc:token.loc.start,message:MISSING_SPACE_MESSAGE,fix:function fix(fixer){return fixer.insertTextBefore(token,\" \");}});}else if(token.value===\")\"&&shouldCloserRejectSpace(prevToken,token)){context.report({node:node,loc:token.loc.start,message:REJECTED_SPACE_MESSAGE,fix:function fix(fixer){return fixer.removeRange([prevToken.range[1],token.range[0]]);}});}});}};}};},{\"../ast-utils\":605}],848:[function(require,module,exports){/**\n * @fileoverview Require spaces around infix operators\n * @author Michael Ficarra\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require spacing around infix operators\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{int32Hint:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var int32Hint=context.options[0]?context.options[0].int32Hint===true:false;var OPERATORS=[\"*\",\"/\",\"%\",\"+\",\"-\",\"<<\",\">>\",\">>>\",\"<\",\"<=\",\">\",\">=\",\"in\",\"instanceof\",\"==\",\"!=\",\"===\",\"!==\",\"&\",\"^\",\"|\",\"&&\",\"||\",\"=\",\"+=\",\"-=\",\"*=\",\"/=\",\"%=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"^=\",\"|=\",\"?\",\":\",\",\",\"**\"];var sourceCode=context.getSourceCode();/**\n         * Returns the first token which violates the rule\n         * @param {ASTNode} left - The left node of the main node\n         * @param {ASTNode} right - The right node of the main node\n         * @returns {Object} The violator token or null\n         * @private\n         */function getFirstNonSpacedToken(left,right){var tokens=sourceCode.getTokensBetween(left,right,1);for(var i=1,l=tokens.length-1;i<l;++i){var op=tokens[i];if((op.type===\"Punctuator\"||op.type===\"Keyword\")&&OPERATORS.indexOf(op.value)>=0&&(tokens[i-1].range[1]>=op.range[0]||op.range[1]>=tokens[i+1].range[0])){return op;}}return null;}/**\n         * Reports an AST node as a rule violation\n         * @param {ASTNode} mainNode - The node to report\n         * @param {Object} culpritToken - The token which has a problem\n         * @returns {void}\n         * @private\n         */function report(mainNode,culpritToken){context.report({node:mainNode,loc:culpritToken.loc.start,message:\"Infix operators must be spaced.\",fix:function fix(fixer){var previousToken=sourceCode.getTokenBefore(culpritToken);var afterToken=sourceCode.getTokenAfter(culpritToken);var fixString=\"\";if(culpritToken.range[0]-previousToken.range[1]===0){fixString=\" \";}fixString+=culpritToken.value;if(afterToken.range[0]-culpritToken.range[1]===0){fixString+=\" \";}return fixer.replaceText(culpritToken,fixString);}});}/**\n         * Check if the node is binary then report\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkBinary(node){if(node.left.typeAnnotation){return;}var nonSpacedNode=getFirstNonSpacedToken(node.left,node.right);if(nonSpacedNode){if(!(int32Hint&&sourceCode.getText(node).substr(-2)===\"|0\")){report(node,nonSpacedNode);}}}/**\n         * Check if the node is conditional\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkConditional(node){var nonSpacedConsequesntNode=getFirstNonSpacedToken(node.test,node.consequent);var nonSpacedAlternateNode=getFirstNonSpacedToken(node.consequent,node.alternate);if(nonSpacedConsequesntNode){report(node,nonSpacedConsequesntNode);}else if(nonSpacedAlternateNode){report(node,nonSpacedAlternateNode);}}/**\n         * Check if the node is a variable\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkVar(node){if(node.init){var nonSpacedNode=getFirstNonSpacedToken(node.id,node.init);if(nonSpacedNode){report(node,nonSpacedNode);}}}return{AssignmentExpression:checkBinary,AssignmentPattern:checkBinary,BinaryExpression:checkBinary,LogicalExpression:checkBinary,ConditionalExpression:checkConditional,VariableDeclarator:checkVar};}};},{}],849:[function(require,module,exports){/**\n * @fileoverview This rule shoud require or disallow spaces before or after unary operations.\n * @author Marcin Kumorek\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing before or after unary operators\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{type:\"object\",properties:{words:{type:\"boolean\"},nonwords:{type:\"boolean\"},overrides:{type:\"object\",additionalProperties:{type:\"boolean\"}}},additionalProperties:false}]},create:function create(context){var options=context.options&&Array.isArray(context.options)&&context.options[0]||{words:true,nonwords:false};var sourceCode=context.getSourceCode();//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n        * Check if the node is the first \"!\" in a \"!!\" convert to Boolean expression\n        * @param {ASTnode} node AST node\n        * @returns {boolean} Whether or not the node is first \"!\" in \"!!\"\n        */function isFirstBangInBangBangExpression(node){return node&&node.type===\"UnaryExpression\"&&node.argument.operator===\"!\"&&node.argument&&node.argument.type===\"UnaryExpression\"&&node.argument.operator===\"!\";}/**\n        * Check if the node's child argument is an \"ObjectExpression\"\n        * @param {ASTnode} node AST node\n        * @returns {boolean} Whether or not the argument's type is \"ObjectExpression\"\n        */function isArgumentObjectExpression(node){return node.argument&&node.argument.type&&node.argument.type===\"ObjectExpression\";}/**\n         * Check if it is safe to remove the spaces between the two tokens in\n         * the context of a non-word prefix unary operator. For example, `+ +1`\n         * cannot safely be changed to `++1`.\n         * @param {Token} firstToken The operator for a non-word prefix unary operator\n         * @param {Token} secondToken The first token of its operand\n         * @returns {boolean} Whether or not the spacing between the tokens can be removed\n         */function canRemoveSpacesBetween(firstToken,secondToken){return!(firstToken.value===\"+\"&&secondToken.value[0]===\"+\"||firstToken.value===\"-\"&&secondToken.value[0]===\"-\");}/**\n        * Checks if an override exists for a given operator.\n        * @param {ASTnode} node AST node\n        * @param {string} operator Operator\n        * @returns {boolean} Whether or not an override has been provided for the operator\n        */function overrideExistsForOperator(node,operator){return options.overrides&&options.overrides.hasOwnProperty(operator);}/**\n        * Gets the value that the override was set to for this operator\n        * @param {ASTnode} node AST node\n        * @param {string} operator Operator\n        * @returns {boolean} Whether or not an override enforces a space with this operator\n        */function overrideEnforcesSpaces(node,operator){return options.overrides[operator];}/**\n        * Verify Unary Word Operator has spaces after the word operator\n        * @param {ASTnode} node AST node\n        * @param {Object} firstToken first token from the AST node\n        * @param {Object} secondToken second token from the AST node\n        * @param {string} word The word to be used for reporting\n        * @returns {void}\n        */function verifyWordHasSpaces(node,firstToken,secondToken,word){if(secondToken.range[0]===firstToken.range[1]){context.report({node:node,message:\"Unary word operator '{{word}}' must be followed by whitespace.\",data:{word:word},fix:function fix(fixer){return fixer.insertTextAfter(firstToken,\" \");}});}}/**\n        * Verify Unary Word Operator doesn't have spaces after the word operator\n        * @param {ASTnode} node AST node\n        * @param {Object} firstToken first token from the AST node\n        * @param {Object} secondToken second token from the AST node\n        * @param {string} word The word to be used for reporting\n        * @returns {void}\n        */function verifyWordDoesntHaveSpaces(node,firstToken,secondToken,word){if(isArgumentObjectExpression(node)){if(secondToken.range[0]>firstToken.range[1]){context.report({node:node,message:\"Unexpected space after unary word operator '{{word}}'.\",data:{word:word},fix:function fix(fixer){return fixer.removeRange([firstToken.range[1],secondToken.range[0]]);}});}}}/**\n        * Check Unary Word Operators for spaces after the word operator\n        * @param {ASTnode} node AST node\n        * @param {Object} firstToken first token from the AST node\n        * @param {Object} secondToken second token from the AST node\n        * @param {string} word The word to be used for reporting\n        * @returns {void}\n        */function checkUnaryWordOperatorForSpaces(node,firstToken,secondToken,word){word=word||firstToken.value;if(overrideExistsForOperator(node,word)){if(overrideEnforcesSpaces(node,word)){verifyWordHasSpaces(node,firstToken,secondToken,word);}else{verifyWordDoesntHaveSpaces(node,firstToken,secondToken,word);}}else if(options.words){verifyWordHasSpaces(node,firstToken,secondToken,word);}else{verifyWordDoesntHaveSpaces(node,firstToken,secondToken,word);}}/**\n        * Verifies YieldExpressions satisfy spacing requirements\n        * @param {ASTnode} node AST node\n        * @returns {void}\n        */function checkForSpacesAfterYield(node){var tokens=sourceCode.getFirstTokens(node,3),word=\"yield\";if(!node.argument||node.delegate){return;}checkUnaryWordOperatorForSpaces(node,tokens[0],tokens[1],word);}/**\n        * Verifies AwaitExpressions satisfy spacing requirements\n        * @param {ASTNode} node AwaitExpression AST node\n        * @returns {void}\n        */function checkForSpacesAfterAwait(node){var tokens=sourceCode.getFirstTokens(node,3);checkUnaryWordOperatorForSpaces(node,tokens[0],tokens[1],\"await\");}/**\n        * Verifies UnaryExpression, UpdateExpression and NewExpression have spaces before or after the operator\n        * @param {ASTnode} node AST node\n        * @param {Object} firstToken First token in the expression\n        * @param {Object} secondToken Second token in the expression\n        * @returns {void}\n        */function verifyNonWordsHaveSpaces(node,firstToken,secondToken){if(node.prefix){if(isFirstBangInBangBangExpression(node)){return;}if(firstToken.range[1]===secondToken.range[0]){context.report({node:node,message:\"Unary operator '{{operator}}' must be followed by whitespace.\",data:{operator:firstToken.value},fix:function fix(fixer){return fixer.insertTextAfter(firstToken,\" \");}});}}else{if(firstToken.range[1]===secondToken.range[0]){context.report({node:node,message:\"Space is required before unary expressions '{{token}}'.\",data:{token:secondToken.value},fix:function fix(fixer){return fixer.insertTextBefore(secondToken,\" \");}});}}}/**\n        * Verifies UnaryExpression, UpdateExpression and NewExpression don't have spaces before or after the operator\n        * @param {ASTnode} node AST node\n        * @param {Object} firstToken First token in the expression\n        * @param {Object} secondToken Second token in the expression\n        * @returns {void}\n        */function verifyNonWordsDontHaveSpaces(node,firstToken,secondToken){if(node.prefix){if(secondToken.range[0]>firstToken.range[1]){context.report({node:node,message:\"Unexpected space after unary operator '{{operator}}'.\",data:{operator:firstToken.value},fix:function fix(fixer){if(canRemoveSpacesBetween(firstToken,secondToken)){return fixer.removeRange([firstToken.range[1],secondToken.range[0]]);}return null;}});}}else{if(secondToken.range[0]>firstToken.range[1]){context.report({node:node,message:\"Unexpected space before unary operator '{{operator}}'.\",data:{operator:secondToken.value},fix:function fix(fixer){return fixer.removeRange([firstToken.range[1],secondToken.range[0]]);}});}}}/**\n        * Verifies UnaryExpression, UpdateExpression and NewExpression satisfy spacing requirements\n        * @param {ASTnode} node AST node\n        * @returns {void}\n        */function checkForSpaces(node){var tokens=sourceCode.getFirstTokens(node,2),firstToken=tokens[0],secondToken=tokens[1];if((node.type===\"NewExpression\"||node.prefix)&&firstToken.type===\"Keyword\"){checkUnaryWordOperatorForSpaces(node,firstToken,secondToken);return;}var operator=node.prefix?tokens[0].value:tokens[1].value;if(overrideExistsForOperator(node,operator)){if(overrideEnforcesSpaces(node,operator)){verifyNonWordsHaveSpaces(node,firstToken,secondToken);}else{verifyNonWordsDontHaveSpaces(node,firstToken,secondToken);}}else if(options.nonwords){verifyNonWordsHaveSpaces(node,firstToken,secondToken);}else{verifyNonWordsDontHaveSpaces(node,firstToken,secondToken);}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{UnaryExpression:checkForSpaces,UpdateExpression:checkForSpaces,NewExpression:checkForSpaces,YieldExpression:checkForSpacesAfterYield,AwaitExpression:checkForSpacesAfterAwait};}};},{}],850:[function(require,module,exports){/**\n * @fileoverview Source code for spaced-comments rule\n * @author Gyandeep Singh\n */\"use strict\";var lodash=require(\"lodash\");var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Escapes the control characters of a given string.\n * @param {string} s - A string to escape.\n * @returns {string} An escaped string.\n */function escape(s){var isOneChar=s.length===1;s=lodash.escapeRegExp(s);return isOneChar?s:\"(?:\"+s+\")\";}/**\n * Escapes the control characters of a given string.\n * And adds a repeat flag.\n * @param {string} s - A string to escape.\n * @returns {string} An escaped string.\n */function escapeAndRepeat(s){return escape(s)+\"+\";}/**\n * Parses `markers` option.\n * If markers don't include `\"*\"`, this adds `\"*\"` to allow JSDoc comments.\n * @param {string[]} [markers] - A marker list.\n * @returns {string[]} A marker list.\n */function parseMarkersOption(markers){markers=markers?markers.slice(0):[];// `*` is a marker for JSDoc comments.\nif(markers.indexOf(\"*\")===-1){markers.push(\"*\");}return markers;}/**\n * Creates string pattern for exceptions.\n * Generated pattern:\n *\n * 1. A space or an exception pattern sequence.\n *\n * @param {string[]} exceptions - An exception pattern list.\n * @returns {string} A regular expression string for exceptions.\n */function createExceptionsPattern(exceptions){var pattern=\"\";/*\n     * A space or an exception pattern sequence.\n     * []                 ==> \"\\s\"\n     * [\"-\"]              ==> \"(?:\\s|\\-+$)\"\n     * [\"-\", \"=\"]         ==> \"(?:\\s|(?:\\-+|=+)$)\"\n     * [\"-\", \"=\", \"--==\"] ==> \"(?:\\s|(?:\\-+|=+|(?:\\-\\-==)+)$)\" ==> https://jex.im/regulex/#!embed=false&flags=&re=(%3F%3A%5Cs%7C(%3F%3A%5C-%2B%7C%3D%2B%7C(%3F%3A%5C-%5C-%3D%3D)%2B)%24)\n     */if(exceptions.length===0){// a space.\npattern+=\"\\\\s\";}else{// a space or...\npattern+=\"(?:\\\\s|\";if(exceptions.length===1){// a sequence of the exception pattern.\npattern+=escapeAndRepeat(exceptions[0]);}else{// a sequence of one of the exception patterns.\npattern+=\"(?:\";pattern+=exceptions.map(escapeAndRepeat).join(\"|\");pattern+=\")\";}pattern+=\"(?:$|[\"+(0,_from2.default)(astUtils.LINEBREAKS).join(\"\")+\"]))\";}return pattern;}/**\n * Creates RegExp object for `always` mode.\n * Generated pattern for beginning of comment:\n *\n * 1. First, a marker or nothing.\n * 2. Next, a space or an exception pattern sequence.\n *\n * @param {string[]} markers - A marker list.\n * @param {string[]} exceptions - An exception pattern list.\n * @returns {RegExp} A RegExp object for the beginning of a comment in `always` mode.\n */function createAlwaysStylePattern(markers,exceptions){var pattern=\"^\";/*\n     * A marker or nothing.\n     * [\"*\"]            ==> \"\\*?\"\n     * [\"*\", \"!\"]       ==> \"(?:\\*|!)?\"\n     * [\"*\", \"/\", \"!<\"] ==> \"(?:\\*|\\/|(?:!<))?\" ==> https://jex.im/regulex/#!embed=false&flags=&re=(%3F%3A%5C*%7C%5C%2F%7C(%3F%3A!%3C))%3F\n     */if(markers.length===1){// the marker.\npattern+=escape(markers[0]);}else{// one of markers.\npattern+=\"(?:\";pattern+=markers.map(escape).join(\"|\");pattern+=\")\";}pattern+=\"?\";// or nothing.\npattern+=createExceptionsPattern(exceptions);return new RegExp(pattern);}/**\n * Creates RegExp object for `never` mode.\n * Generated pattern for beginning of comment:\n *\n * 1. First, a marker or nothing (captured).\n * 2. Next, a space or a tab.\n *\n * @param {string[]} markers - A marker list.\n * @returns {RegExp} A RegExp object for `never` mode.\n */function createNeverStylePattern(markers){var pattern=\"^(\"+markers.map(escape).join(\"|\")+\")?[ \\t]+\";return new RegExp(pattern);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce consistent spacing after the `//` or `/*` in a comment\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{exceptions:{type:\"array\",items:{type:\"string\"}},markers:{type:\"array\",items:{type:\"string\"}},line:{type:\"object\",properties:{exceptions:{type:\"array\",items:{type:\"string\"}},markers:{type:\"array\",items:{type:\"string\"}}},additionalProperties:false},block:{type:\"object\",properties:{exceptions:{type:\"array\",items:{type:\"string\"}},markers:{type:\"array\",items:{type:\"string\"}},balanced:{type:\"boolean\"}},additionalProperties:false}},additionalProperties:false}]},create:function create(context){// Unless the first option is never, require a space\nvar requireSpace=context.options[0]!==\"never\";/*\n         * Parse the second options.\n         * If markers don't include `\"*\"`, it's added automatically for JSDoc\n         * comments.\n         */var config=context.options[1]||{};var balanced=config.block&&config.block.balanced;var styleRules=[\"block\",\"line\"].reduce(function(rule,type){var markers=parseMarkersOption(config[type]&&config[type].markers||config.markers);var exceptions=config[type]&&config[type].exceptions||config.exceptions||[];var endNeverPattern=\"[ \\t]+$\";// Create RegExp object for valid patterns.\nrule[type]={beginRegex:requireSpace?createAlwaysStylePattern(markers,exceptions):createNeverStylePattern(markers),endRegex:balanced&&requireSpace?new RegExp(createExceptionsPattern(exceptions)+\"$\"):new RegExp(endNeverPattern),hasExceptions:exceptions.length>0,markers:new RegExp(\"^(\"+markers.map(escape).join(\"|\")+\")\")};return rule;},{});/**\n         * Reports a beginning spacing error with an appropriate message.\n         * @param {ASTNode} node - A comment node to check.\n         * @param {string} message - An error message to report.\n         * @param {Array} match - An array of match results for markers.\n         * @param {string} refChar - Character used for reference in the error message.\n         * @returns {void}\n         */function reportBegin(node,message,match,refChar){var type=node.type.toLowerCase(),commentIdentifier=type===\"block\"?\"/*\":\"//\";context.report({node:node,fix:function fix(fixer){var start=node.range[0];var end=start+2;if(requireSpace){if(match){end+=match[0].length;}return fixer.insertTextAfterRange([start,end],\" \");}end+=match[0].length;return fixer.replaceTextRange([start,end],commentIdentifier+(match[1]?match[1]:\"\"));},message:message,data:{refChar:refChar}});}/**\n         * Reports an ending spacing error with an appropriate message.\n         * @param {ASTNode} node - A comment node to check.\n         * @param {string} message - An error message to report.\n         * @param {string} match - An array of the matched whitespace characters.\n         * @returns {void}\n         */function reportEnd(node,message,match){context.report({node:node,fix:function fix(fixer){if(requireSpace){return fixer.insertTextAfterRange([node.start,node.end-2],\" \");}var end=node.end-2,start=end-match[0].length;return fixer.replaceTextRange([start,end],\"\");},message:message});}/**\n         * Reports a given comment if it's invalid.\n         * @param {ASTNode} node - a comment node to check.\n         * @returns {void}\n         */function checkCommentForSpace(node){var type=node.type.toLowerCase(),rule=styleRules[type],commentIdentifier=type===\"block\"?\"/*\":\"//\";// Ignores empty comments.\nif(node.value.length===0){return;}var beginMatch=rule.beginRegex.exec(node.value);var endMatch=rule.endRegex.exec(node.value);// Checks.\nif(requireSpace){if(!beginMatch){var hasMarker=rule.markers.exec(node.value);var marker=hasMarker?commentIdentifier+hasMarker[0]:commentIdentifier;if(rule.hasExceptions){reportBegin(node,\"Expected exception block, space or tab after '{{refChar}}' in comment.\",hasMarker,marker);}else{reportBegin(node,\"Expected space or tab after '{{refChar}}' in comment.\",hasMarker,marker);}}if(balanced&&type===\"block\"&&!endMatch){reportEnd(node,\"Expected space or tab before '*/' in comment.\");}}else{if(beginMatch){if(!beginMatch[1]){reportBegin(node,\"Unexpected space or tab after '{{refChar}}' in comment.\",beginMatch,commentIdentifier);}else{reportBegin(node,\"Unexpected space or tab after marker ({{refChar}}) in comment.\",beginMatch,beginMatch[1]);}}if(balanced&&type===\"block\"&&endMatch){reportEnd(node,\"Unexpected space or tab before '*/' in comment.\",endMatch);}}}return{LineComment:checkCommentForSpace,BlockComment:checkCommentForSpace};}};},{\"../ast-utils\":605,\"lodash\":566}],851:[function(require,module,exports){/**\n * @fileoverview Rule to control usage of strict mode directives.\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar messages={function:\"Use the function form of 'use strict'.\",global:\"Use the global form of 'use strict'.\",multiple:\"Multiple 'use strict' directives.\",never:\"Strict mode is not permitted.\",unnecessary:\"Unnecessary 'use strict' directive.\",module:\"'use strict' is unnecessary inside of modules.\",implied:\"'use strict' is unnecessary when implied strict mode is enabled.\",unnecessaryInClasses:\"'use strict' is unnecessary inside of classes.\",nonSimpleParameterList:\"'use strict' directive inside a function with non-simple parameter list throws a syntax error since ES2016.\",wrap:\"Wrap {{name}} in a function with 'use strict' directive.\"};/**\n * Gets all of the Use Strict Directives in the Directive Prologue of a group of\n * statements.\n * @param {ASTNode[]} statements Statements in the program or function body.\n * @returns {ASTNode[]} All of the Use Strict Directives.\n */function getUseStrictDirectives(statements){var directives=[];for(var i=0;i<statements.length;i++){var statement=statements[i];if(statement.type===\"ExpressionStatement\"&&statement.expression.type===\"Literal\"&&statement.expression.value===\"use strict\"){directives[i]=statement;}else{break;}}return directives;}/**\n * Checks whether a given parameter is a simple parameter.\n *\n * @param {ASTNode} node - A pattern node to check.\n * @returns {boolean} `true` if the node is an Identifier node.\n */function isSimpleParameter(node){return node.type===\"Identifier\";}/**\n * Checks whether a given parameter list is a simple parameter list.\n *\n * @param {ASTNode[]} params - A parameter list to check.\n * @returns {boolean} `true` if the every parameter is an Identifier node.\n */function isSimpleParameterList(params){return params.every(isSimpleParameter);}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow strict mode directives\",category:\"Strict Mode\",recommended:false},schema:[{enum:[\"never\",\"global\",\"function\",\"safe\"]}],fixable:\"code\"},create:function create(context){var ecmaFeatures=context.parserOptions.ecmaFeatures||{},scopes=[],classScopes=[];var mode=context.options[0]||\"safe\";if(ecmaFeatures.impliedStrict){mode=\"implied\";}else if(mode===\"safe\"){mode=ecmaFeatures.globalReturn?\"global\":\"function\";}/**\n        * Determines whether a reported error should be fixed, depending on the error type.\n        * @param {string} errorType The type of error\n        * @returns {boolean} `true` if the reported error should be fixed\n        */function shouldFix(errorType){return errorType===\"multiple\"||errorType===\"unnecessary\"||errorType===\"module\"||errorType===\"implied\"||errorType===\"unnecessaryInClasses\";}/**\n        * Gets a fixer function to remove a given 'use strict' directive.\n        * @param {ASTNode} node The directive that should be removed\n        * @returns {Function} A fixer function\n        */function getFixFunction(node){return function(fixer){return fixer.remove(node);};}/**\n         * Report a slice of an array of nodes with a given message.\n         * @param {ASTNode[]} nodes Nodes.\n         * @param {string} start Index to start from.\n         * @param {string} end Index to end before.\n         * @param {string} message Message to display.\n         * @param {boolean} fix `true` if the directive should be fixed (i.e. removed)\n         * @returns {void}\n         */function reportSlice(nodes,start,end,message,fix){nodes.slice(start,end).forEach(function(node){context.report({node:node,message:message,fix:fix?getFixFunction(node):null});});}/**\n         * Report all nodes in an array with a given message.\n         * @param {ASTNode[]} nodes Nodes.\n         * @param {string} message Message to display.\n         * @param {boolean} fix `true` if the directive should be fixed (i.e. removed)\n         * @returns {void}\n         */function reportAll(nodes,message,fix){reportSlice(nodes,0,nodes.length,message,fix);}/**\n         * Report all nodes in an array, except the first, with a given message.\n         * @param {ASTNode[]} nodes Nodes.\n         * @param {string} message Message to display.\n         * @param {boolean} fix `true` if the directive should be fixed (i.e. removed)\n         * @returns {void}\n         */function reportAllExceptFirst(nodes,message,fix){reportSlice(nodes,1,nodes.length,message,fix);}/**\n         * Entering a function in 'function' mode pushes a new nested scope onto the\n         * stack. The new scope is true if the nested function is strict mode code.\n         * @param {ASTNode} node The function declaration or expression.\n         * @param {ASTNode[]} useStrictDirectives The Use Strict Directives of the node.\n         * @returns {void}\n         */function enterFunctionInFunctionMode(node,useStrictDirectives){var isInClass=classScopes.length>0,isParentGlobal=scopes.length===0&&classScopes.length===0,isParentStrict=scopes.length>0&&scopes[scopes.length-1],isStrict=useStrictDirectives.length>0;if(isStrict){if(!isSimpleParameterList(node.params)){context.report({node:useStrictDirectives[0],message:messages.nonSimpleParameterList});}else if(isParentStrict){context.report({node:useStrictDirectives[0],message:messages.unnecessary,fix:getFixFunction(useStrictDirectives[0])});}else if(isInClass){context.report({node:useStrictDirectives[0],message:messages.unnecessaryInClasses,fix:getFixFunction(useStrictDirectives[0])});}reportAllExceptFirst(useStrictDirectives,messages.multiple,true);}else if(isParentGlobal){if(isSimpleParameterList(node.params)){context.report({node:node,message:messages.function});}else{context.report({node:node,message:messages.wrap,data:{name:astUtils.getFunctionNameWithKind(node)}});}}scopes.push(isParentStrict||isStrict);}/**\n         * Exiting a function in 'function' mode pops its scope off the stack.\n         * @returns {void}\n         */function exitFunctionInFunctionMode(){scopes.pop();}/**\n         * Enter a function and either:\n         * - Push a new nested scope onto the stack (in 'function' mode).\n         * - Report all the Use Strict Directives (in the other modes).\n         * @param {ASTNode} node The function declaration or expression.\n         * @returns {void}\n         */function enterFunction(node){var isBlock=node.body.type===\"BlockStatement\",useStrictDirectives=isBlock?getUseStrictDirectives(node.body.body):[];if(mode===\"function\"){enterFunctionInFunctionMode(node,useStrictDirectives);}else if(useStrictDirectives.length>0){if(isSimpleParameterList(node.params)){reportAll(useStrictDirectives,messages[mode],shouldFix(mode));}else{context.report({node:useStrictDirectives[0],message:messages.nonSimpleParameterList});reportAllExceptFirst(useStrictDirectives,messages.multiple,true);}}}var rule={Program:function Program(node){var useStrictDirectives=getUseStrictDirectives(node.body);if(node.sourceType===\"module\"){mode=\"module\";}if(mode===\"global\"){if(node.body.length>0&&useStrictDirectives.length===0){context.report({node:node,message:messages.global});}reportAllExceptFirst(useStrictDirectives,messages.multiple,true);}else{reportAll(useStrictDirectives,messages[mode],shouldFix(mode));}},FunctionDeclaration:enterFunction,FunctionExpression:enterFunction,ArrowFunctionExpression:enterFunction};if(mode===\"function\"){(0,_assign4.default)(rule,{// Inside of class bodies are always strict mode.\nClassBody:function ClassBody(){classScopes.push(true);},\"ClassBody:exit\":function ClassBodyExit(){classScopes.pop();},\"FunctionDeclaration:exit\":exitFunctionInFunctionMode,\"FunctionExpression:exit\":exitFunctionInFunctionMode,\"ArrowFunctionExpression:exit\":exitFunctionInFunctionMode});}return rule;}};},{\"../ast-utils\":605}],852:[function(require,module,exports){/**\n * @fileoverview Rule to enforce description with the `Symbol` object\n * @author Jarek Rencz\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require symbol descriptions\",category:\"ECMAScript 6\",recommended:false},schema:[]},create:function create(context){/**\n         * Reports if node does not conform the rule in case rule is set to\n         * report missing description\n         *\n         * @param {ASTNode} node - A CallExpression node to check.\n         * @returns {void}\n         */function checkArgument(node){if(node.arguments.length===0){context.report({node:node,message:\"Expected Symbol to have a description.\"});}}return{\"Program:exit\":function ProgramExit(){var scope=context.getScope();var variable=astUtils.getVariableByName(scope,\"Symbol\");if(variable&&variable.defs.length===0){variable.references.forEach(function(reference){var node=reference.identifier;if(astUtils.isCallee(node)){checkArgument(node.parent);}});}}};}};},{\"../ast-utils\":605}],853:[function(require,module,exports){/**\n * @fileoverview Rule to enforce spacing around embedded expressions of template strings\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar OPEN_PAREN=/\\$\\{$/;var CLOSE_PAREN=/^\\}/;//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow spacing around embedded expressions of template strings\",category:\"ECMAScript 6\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]}]},create:function create(context){var sourceCode=context.getSourceCode();var always=context.options[0]===\"always\";var prefix=always?\"Expected\":\"Unexpected\";/**\n         * Checks spacing before `}` of a given token.\n         * @param {Token} token - A token to check. This is a Template token.\n         * @returns {void}\n         */function checkSpacingBefore(token){var prevToken=sourceCode.getTokenBefore(token);if(prevToken&&CLOSE_PAREN.test(token.value)&&astUtils.isTokenOnSameLine(prevToken,token)&&sourceCode.isSpaceBetweenTokens(prevToken,token)!==always){context.report({loc:token.loc.start,message:\"{{prefix}} space(s) before '}'.\",data:{prefix:prefix},fix:function fix(fixer){if(always){return fixer.insertTextBefore(token,\" \");}return fixer.removeRange([prevToken.range[1],token.range[0]]);}});}}/**\n         * Checks spacing after `${` of a given token.\n         * @param {Token} token - A token to check. This is a Template token.\n         * @returns {void}\n         */function checkSpacingAfter(token){var nextToken=sourceCode.getTokenAfter(token);if(nextToken&&OPEN_PAREN.test(token.value)&&astUtils.isTokenOnSameLine(token,nextToken)&&sourceCode.isSpaceBetweenTokens(token,nextToken)!==always){context.report({loc:{line:token.loc.end.line,column:token.loc.end.column-2},message:\"{{prefix}} space(s) after '${'.\",data:{prefix:prefix},fix:function fix(fixer){if(always){return fixer.insertTextAfter(token,\" \");}return fixer.removeRange([token.range[1],nextToken.range[0]]);}});}}return{TemplateElement:function TemplateElement(node){var token=sourceCode.getFirstToken(node);checkSpacingBefore(token);checkSpacingAfter(token);}};}};},{\"../ast-utils\":605}],854:[function(require,module,exports){/**\n * @fileoverview Rule to check spacing between template tags and their literals\n * @author Jonathan Wilsson\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow spacing between template tags and their literals\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]}]},create:function create(context){var never=context.options[0]!==\"always\";var sourceCode=context.getSourceCode();/**\n         * Check if a space is present between a template tag and its literal\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */function checkSpacing(node){var tagToken=sourceCode.getTokenBefore(node.quasi);var literalToken=sourceCode.getFirstToken(node.quasi);var hasWhitespace=sourceCode.isSpaceBetweenTokens(tagToken,literalToken);if(never&&hasWhitespace){context.report({node:node,loc:tagToken.loc.start,message:\"Unexpected space between template tag and template literal.\",fix:function fix(fixer){var comments=sourceCode.getComments(node.quasi).leading;// Don't fix anything if there's a single line comment after the template tag\nif(comments.some(function(comment){return comment.type===\"Line\";})){return null;}return fixer.replaceTextRange([tagToken.range[1],literalToken.range[0]],comments.reduce(function(text,comment){return text+sourceCode.getText(comment);},\"\"));}});}else if(!never&&!hasWhitespace){context.report({node:node,loc:tagToken.loc.start,message:\"Missing space between template tag and template literal.\",fix:function fix(fixer){return fixer.insertTextAfter(tagToken,\" \");}});}}return{TaggedTemplateExpression:checkSpacing};}};},{}],855:[function(require,module,exports){/**\n * @fileoverview Require or disallow Unicode BOM\n * @author Andrew Johnston <https://github.com/ehjay>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow Unicode byte order mark (BOM)\",category:\"Stylistic Issues\",recommended:false},fixable:\"whitespace\",schema:[{enum:[\"always\",\"never\"]}]},create:function create(context){//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{Program:function checkUnicodeBOM(node){var sourceCode=context.getSourceCode(),location={column:0,line:1},requireBOM=context.options[0]||\"never\";if(!sourceCode.hasBOM&&requireBOM===\"always\"){context.report({node:node,loc:location,message:\"Expected Unicode BOM (Byte Order Mark).\",fix:function fix(fixer){return fixer.insertTextBeforeRange([0,1],\"\\uFEFF\");}});}else if(sourceCode.hasBOM&&requireBOM===\"never\"){context.report({node:node,loc:location,message:\"Unexpected Unicode BOM (Byte Order Mark).\",fix:function fix(fixer){return fixer.removeRange([-1,0]);}});}}};}};},{}],856:[function(require,module,exports){/**\n * @fileoverview Rule to flag comparisons to the value NaN\n * @author James Allardice\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require calls to `isNaN()` when checking for `NaN`\",category:\"Possible Errors\",recommended:true},schema:[]},create:function create(context){return{BinaryExpression:function BinaryExpression(node){if(/^(?:[<>]|[!=]=)=?$/.test(node.operator)&&(node.left.name===\"NaN\"||node.right.name===\"NaN\")){context.report({node:node,message:\"Use the isNaN function to compare with NaN.\"});}}};}};},{}],857:[function(require,module,exports){/**\n * @fileoverview Validates JSDoc comments are syntactically correct\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar doctrine=require(\"doctrine\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce valid JSDoc comments\",category:\"Possible Errors\",recommended:false},schema:[{type:\"object\",properties:{prefer:{type:\"object\",additionalProperties:{type:\"string\"}},preferType:{type:\"object\",additionalProperties:{type:\"string\"}},requireReturn:{type:\"boolean\"},requireParamDescription:{type:\"boolean\"},requireReturnDescription:{type:\"boolean\"},matchDescription:{type:\"string\"},requireReturnType:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var options=context.options[0]||{},prefer=options.prefer||{},sourceCode=context.getSourceCode(),// these both default to true, so you have to explicitly make them false\nrequireReturn=options.requireReturn!==false,requireParamDescription=options.requireParamDescription!==false,requireReturnDescription=options.requireReturnDescription!==false,requireReturnType=options.requireReturnType!==false,preferType=options.preferType||{},checkPreferType=(0,_keys4.default)(preferType).length!==0;//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n// Using a stack to store if a function returns or not (handling nested functions)\nvar fns=[];/**\n         * Check if node type is a Class\n         * @param {ASTNode} node node to check.\n         * @returns {boolean} True is its a class\n         * @private\n         */function isTypeClass(node){return node.type===\"ClassExpression\"||node.type===\"ClassDeclaration\";}/**\n         * When parsing a new function, store it in our function stack.\n         * @param {ASTNode} node A function node to check.\n         * @returns {void}\n         * @private\n         */function startFunction(node){fns.push({returnPresent:node.type===\"ArrowFunctionExpression\"&&node.body.type!==\"BlockStatement\"||isTypeClass(node)});}/**\n         * Indicate that return has been found in the current function.\n         * @param {ASTNode} node The return node.\n         * @returns {void}\n         * @private\n         */function addReturn(node){var functionState=fns[fns.length-1];if(functionState&&node.argument!==null){functionState.returnPresent=true;}}/**\n         * Check if return tag type is void or undefined\n         * @param {Object} tag JSDoc tag\n         * @returns {boolean} True if its of type void or undefined\n         * @private\n         */function isValidReturnType(tag){return tag.type===null||tag.type.name===\"void\"||tag.type.type===\"UndefinedLiteral\";}/**\n         * Check if type should be validated based on some exceptions\n         * @param {Object} type JSDoc tag\n         * @returns {boolean} True if it can be validated\n         * @private\n         */function canTypeBeValidated(type){return type!==\"UndefinedLiteral\"&&// {undefined} as there is no name property available.\ntype!==\"NullLiteral\"&&// {null}\ntype!==\"NullableLiteral\"&&// {?}\ntype!==\"FunctionType\"&&// {function(a)}\ntype!==\"AllLiteral\";// {*}\n}/**\n         * Extract the current and expected type based on the input type object\n         * @param {Object} type JSDoc tag\n         * @returns {Object} current and expected type object\n         * @private\n         */function getCurrentExpectedTypes(type){var currentType=void 0;if(type.name){currentType=type.name;}else if(type.expression){currentType=type.expression.name;}var expectedType=currentType&&preferType[currentType];return{currentType:currentType,expectedType:expectedType};}/**\n         * Validate type for a given JSDoc node\n         * @param {Object} jsdocNode JSDoc node\n         * @param {Object} type JSDoc tag\n         * @returns {void}\n         * @private\n         */function validateType(jsdocNode,type){if(!type||!canTypeBeValidated(type.type)){return;}var typesToCheck=[];var elements=[];switch(type.type){case\"TypeApplication\":// {Array.<String>}\nelements=type.applications[0].type===\"UnionType\"?type.applications[0].elements:type.applications;typesToCheck.push(getCurrentExpectedTypes(type));break;case\"RecordType\":// {{20:String}}\nelements=type.fields;break;case\"UnionType\":// {String|number|Test}\ncase\"ArrayType\":// {[String, number, Test]}\nelements=type.elements;break;case\"FieldType\":// Array.<{count: number, votes: number}>\nif(type.value){typesToCheck.push(getCurrentExpectedTypes(type.value));}break;default:typesToCheck.push(getCurrentExpectedTypes(type));}elements.forEach(validateType.bind(null,jsdocNode));typesToCheck.forEach(function(typeToCheck){if(typeToCheck.expectedType&&typeToCheck.expectedType!==typeToCheck.currentType){context.report({node:jsdocNode,message:\"Use '{{expectedType}}' instead of '{{currentType}}'.\",data:{currentType:typeToCheck.currentType,expectedType:typeToCheck.expectedType}});}});}/**\n         * Validate the JSDoc node and output warnings if anything is wrong.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         * @private\n         */function checkJSDoc(node){var jsdocNode=sourceCode.getJSDocComment(node),functionData=fns.pop(),params=(0,_create4.default)(null);var hasReturns=false,hasConstructor=false,isInterface=false,isOverride=false,isAbstract=false,jsdoc=void 0;// make sure only to validate JSDoc comments\nif(jsdocNode){try{jsdoc=doctrine.parse(jsdocNode.value,{strict:true,unwrap:true,sloppy:true});}catch(ex){if(/braces/i.test(ex.message)){context.report({node:jsdocNode,message:\"JSDoc type missing brace.\"});}else{context.report({node:jsdocNode,message:\"JSDoc syntax error.\"});}return;}jsdoc.tags.forEach(function(tag){switch(tag.title.toLowerCase()){case\"param\":case\"arg\":case\"argument\":if(!tag.type){context.report({node:jsdocNode,message:\"Missing JSDoc parameter type for '{{name}}'.\",data:{name:tag.name}});}if(!tag.description&&requireParamDescription){context.report({node:jsdocNode,message:\"Missing JSDoc parameter description for '{{name}}'.\",data:{name:tag.name}});}if(params[tag.name]){context.report({node:jsdocNode,message:\"Duplicate JSDoc parameter '{{name}}'.\",data:{name:tag.name}});}else if(tag.name.indexOf(\".\")===-1){params[tag.name]=1;}break;case\"return\":case\"returns\":hasReturns=true;if(!requireReturn&&!functionData.returnPresent&&(tag.type===null||!isValidReturnType(tag))&&!isAbstract){context.report({node:jsdocNode,message:\"Unexpected @{{title}} tag; function has no return statement.\",data:{title:tag.title}});}else{if(requireReturnType&&!tag.type){context.report({node:jsdocNode,message:\"Missing JSDoc return type.\"});}if(!isValidReturnType(tag)&&!tag.description&&requireReturnDescription){context.report({node:jsdocNode,message:\"Missing JSDoc return description.\"});}}break;case\"constructor\":case\"class\":hasConstructor=true;break;case\"override\":case\"inheritdoc\":isOverride=true;break;case\"abstract\":case\"virtual\":isAbstract=true;break;case\"interface\":isInterface=true;break;// no default\n}// check tag preferences\nif(prefer.hasOwnProperty(tag.title)&&tag.title!==prefer[tag.title]){context.report({node:jsdocNode,message:\"Use @{{name}} instead.\",data:{name:prefer[tag.title]}});}// validate the types\nif(checkPreferType&&tag.type){validateType(jsdocNode,tag.type);}});// check for functions missing @returns\nif(!isOverride&&!hasReturns&&!hasConstructor&&!isInterface&&node.parent.kind!==\"get\"&&node.parent.kind!==\"constructor\"&&node.parent.kind!==\"set\"&&!isTypeClass(node)){if(requireReturn||functionData.returnPresent){context.report({node:jsdocNode,message:\"Missing JSDoc @{{returns}} for function.\",data:{returns:prefer.returns||\"returns\"}});}}// check the parameters\nvar jsdocParams=(0,_keys4.default)(params);if(node.params){node.params.forEach(function(param,i){if(param.type===\"AssignmentPattern\"){param=param.left;}var name=param.name;// TODO(nzakas): Figure out logical things to do with destructured, default, rest params\nif(param.type===\"Identifier\"){if(jsdocParams[i]&&name!==jsdocParams[i]){context.report({node:jsdocNode,message:\"Expected JSDoc for '{{name}}' but found '{{jsdocName}}'.\",data:{name:name,jsdocName:jsdocParams[i]}});}else if(!params[name]&&!isOverride){context.report({node:jsdocNode,message:\"Missing JSDoc for parameter '{{name}}'.\",data:{name:name}});}}});}if(options.matchDescription){var regex=new RegExp(options.matchDescription);if(!regex.test(jsdoc.description)){context.report({node:jsdocNode,message:\"JSDoc description does not satisfy the regex pattern.\"});}}}}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{ArrowFunctionExpression:startFunction,FunctionExpression:startFunction,FunctionDeclaration:startFunction,ClassExpression:startFunction,ClassDeclaration:startFunction,\"ArrowFunctionExpression:exit\":checkJSDoc,\"FunctionExpression:exit\":checkJSDoc,\"FunctionDeclaration:exit\":checkJSDoc,\"ClassExpression:exit\":checkJSDoc,\"ClassDeclaration:exit\":checkJSDoc,ReturnStatement:addReturn};}};},{\"doctrine\":182}],858:[function(require,module,exports){/**\n * @fileoverview Ensures that the results of typeof are compared against a valid string\n * @author Ian Christian Myers\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"enforce comparing `typeof` expressions against valid strings\",category:\"Possible Errors\",recommended:true},schema:[{type:\"object\",properties:{requireStringLiterals:{type:\"boolean\"}},additionalProperties:false}]},create:function create(context){var VALID_TYPES=[\"symbol\",\"undefined\",\"object\",\"boolean\",\"number\",\"string\",\"function\"],OPERATORS=[\"==\",\"===\",\"!=\",\"!==\"];var requireStringLiterals=context.options[0]&&context.options[0].requireStringLiterals;/**\n        * Determines whether a node is a typeof expression.\n        * @param {ASTNode} node The node\n        * @returns {boolean} `true` if the node is a typeof expression\n        */function isTypeofExpression(node){return node.type===\"UnaryExpression\"&&node.operator===\"typeof\";}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{UnaryExpression:function UnaryExpression(node){if(isTypeofExpression(node)){var parent=context.getAncestors().pop();if(parent.type===\"BinaryExpression\"&&OPERATORS.indexOf(parent.operator)!==-1){var sibling=parent.left===node?parent.right:parent.left;if(sibling.type===\"Literal\"||sibling.type===\"TemplateLiteral\"&&!sibling.expressions.length){var value=sibling.type===\"Literal\"?sibling.value:sibling.quasis[0].value.cooked;if(VALID_TYPES.indexOf(value)===-1){context.report({node:sibling,message:\"Invalid typeof comparison value.\"});}}else if(requireStringLiterals&&!isTypeofExpression(sibling)){context.report({node:sibling,message:\"Typeof comparisons should be to string literals.\"});}}}}};}};},{}],859:[function(require,module,exports){/**\n * @fileoverview Rule to enforce var declarations are only at the top of a function.\n * @author Danny Fritz\n * @author Gyandeep Singh\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require `var` declarations be placed at the top of their containing scope\",category:\"Best Practices\",recommended:false},schema:[]},create:function create(context){var errorMessage=\"All 'var' declarations must be at the top of the function scope.\";//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n         * @param {ASTNode} node - any node\n         * @returns {boolean} whether the given node structurally represents a directive\n         */function looksLikeDirective(node){return node.type===\"ExpressionStatement\"&&node.expression.type===\"Literal\"&&typeof node.expression.value===\"string\";}/**\n         * Check to see if its a ES6 import declaration\n         * @param {ASTNode} node - any node\n         * @returns {boolean} whether the given node represents a import declaration\n         */function looksLikeImport(node){return node.type===\"ImportDeclaration\"||node.type===\"ImportSpecifier\"||node.type===\"ImportDefaultSpecifier\"||node.type===\"ImportNamespaceSpecifier\";}/**\n         * Checks whether a given node is a variable declaration or not.\n         *\n         * @param {ASTNode} node - any node\n         * @returns {boolean} `true` if the node is a variable declaration.\n         */function isVariableDeclaration(node){return node.type===\"VariableDeclaration\"||node.type===\"ExportNamedDeclaration\"&&node.declaration&&node.declaration.type===\"VariableDeclaration\";}/**\n         * Checks whether this variable is on top of the block body\n         * @param {ASTNode} node - The node to check\n         * @param {ASTNode[]} statements - collection of ASTNodes for the parent node block\n         * @returns {boolean} True if var is on top otherwise false\n         */function isVarOnTop(node,statements){var l=statements.length;var i=0;// skip over directives\nfor(;i<l;++i){if(!looksLikeDirective(statements[i])&&!looksLikeImport(statements[i])){break;}}for(;i<l;++i){if(!isVariableDeclaration(statements[i])){return false;}if(statements[i]===node){return true;}}return false;}/**\n         * Checks whether variable is on top at the global level\n         * @param {ASTNode} node - The node to check\n         * @param {ASTNode} parent - Parent of the node\n         * @returns {void}\n         */function globalVarCheck(node,parent){if(!isVarOnTop(node,parent.body)){context.report({node:node,message:errorMessage});}}/**\n         * Checks whether variable is on top at functional block scope level\n         * @param {ASTNode} node - The node to check\n         * @param {ASTNode} parent - Parent of the node\n         * @param {ASTNode} grandParent - Parent of the node's parent\n         * @returns {void}\n         */function blockScopeVarCheck(node,parent,grandParent){if(!(/Function/.test(grandParent.type)&&parent.type===\"BlockStatement\"&&isVarOnTop(node,parent.body))){context.report({node:node,message:errorMessage});}}//--------------------------------------------------------------------------\n// Public API\n//--------------------------------------------------------------------------\nreturn{VariableDeclaration:function VariableDeclaration(node){var ancestors=context.getAncestors();var parent=ancestors.pop();var grandParent=ancestors.pop();if(node.kind===\"var\"){// check variable is `var` type and not `let` or `const`\nif(parent.type===\"ExportNamedDeclaration\"){node=parent;parent=grandParent;grandParent=ancestors.pop();}if(parent.type===\"Program\"){// That means its a global variable\nglobalVarCheck(node,parent);}else{blockScopeVarCheck(node,parent,grandParent);}}}};}};},{}],860:[function(require,module,exports){/**\n * @fileoverview Rule to flag when IIFE is not wrapped in parens\n * @author Ilya Volodin\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require parentheses around immediate `function` invocations\",category:\"Best Practices\",recommended:false},schema:[{enum:[\"outside\",\"inside\",\"any\"]},{type:\"object\",properties:{functionPrototypeMethods:{type:\"boolean\"}},additionalProperties:false}],fixable:\"code\"},create:function create(context){var style=context.options[0]||\"outside\";var includeFunctionPrototypeMethods=context.options[1]&&context.options[1].functionPrototypeMethods||false;var sourceCode=context.getSourceCode();/**\n         * Check if the node is wrapped in ()\n         * @param {ASTNode} node node to evaluate\n         * @returns {boolean} True if it is wrapped\n         * @private\n         */function wrapped(node){return astUtils.isParenthesised(sourceCode,node);}/**\n        * Get the function node from an IIFE\n        * @param {ASTNode} node node to evaluate\n        * @returns {ASTNode} node that is the function expression of the given IIFE, or null if none exist\n        */function getFunctionNodeFromIIFE(node){var callee=node.callee;if(callee.type===\"FunctionExpression\"){return callee;}if(includeFunctionPrototypeMethods&&callee.type===\"MemberExpression\"&&callee.object.type===\"FunctionExpression\"&&(astUtils.getStaticPropertyName(callee)===\"call\"||astUtils.getStaticPropertyName(callee)===\"apply\")){return callee.object;}return null;}return{CallExpression:function CallExpression(node){var innerNode=getFunctionNodeFromIIFE(node);if(!innerNode){return;}var callExpressionWrapped=wrapped(node),functionExpressionWrapped=wrapped(innerNode);if(!callExpressionWrapped&&!functionExpressionWrapped){context.report({node:node,message:\"Wrap an immediate function invocation in parentheses.\",fix:function fix(fixer){var nodeToSurround=style===\"inside\"?innerNode:node;return fixer.replaceText(nodeToSurround,\"(\"+sourceCode.getText(nodeToSurround)+\")\");}});}else if(style===\"inside\"&&!functionExpressionWrapped){context.report({node:node,message:\"Wrap only the function expression in parens.\",fix:function fix(fixer){/*\n                             * The outer call expression will always be wrapped at this point.\n                             * Replace the range between the end of the function expression and the end of the call expression.\n                             * for example, in `(function(foo) {}(bar))`, the range `(bar))` should get replaced with `)(bar)`.\n                             * Replace the parens from the outer expression, and parenthesize the function expression.\n                             */var parenAfter=sourceCode.getTokenAfter(node);return fixer.replaceTextRange([innerNode.range[1],parenAfter.range[1]],\")\"+sourceCode.getText().slice(innerNode.range[1],parenAfter.range[0]));}});}else if(style===\"outside\"&&!callExpressionWrapped){context.report({node:node,message:\"Move the invocation into the parens that contain the function.\",fix:function fix(fixer){/*\n                             * The inner function expression will always be wrapped at this point.\n                             * It's only necessary to replace the range between the end of the function expression\n                             * and the call expression. For example, in `(function(foo) {})(bar)`, the range `)(bar)`\n                             * should get replaced with `(bar))`.\n                             */var parenAfter=sourceCode.getTokenAfter(innerNode);return fixer.replaceTextRange([parenAfter.range[0],node.range[1]],sourceCode.getText().slice(parenAfter.range[1],node.range[1])+\")\");}});}}};}};},{\"../ast-utils\":605}],861:[function(require,module,exports){/**\n * @fileoverview Rule to flag when regex literals are not wrapped in parens\n * @author Matt DuVall <http://www.mattduvall.com>\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require parenthesis around regex literals\",category:\"Stylistic Issues\",recommended:false},schema:[],fixable:\"code\"},create:function create(context){var sourceCode=context.getSourceCode();return{Literal:function Literal(node){var token=sourceCode.getFirstToken(node),nodeType=token.type;if(nodeType===\"RegularExpression\"){var source=sourceCode.getTokenBefore(node);var ancestors=context.getAncestors();var grandparent=ancestors[ancestors.length-1];if(grandparent.type===\"MemberExpression\"&&grandparent.object===node&&(!source||source.value!==\"(\")){context.report({node:node,message:\"Wrap the regexp literal in parens to disambiguate the slash.\",fix:function fix(fixer){return fixer.replaceText(node,\"(\"+sourceCode.getText(node)+\")\");}});}}}};}};},{}],862:[function(require,module,exports){/**\n * @fileoverview Rule to check the spacing around the * in yield* expressions.\n * @author Bryan Smith\n */\"use strict\";//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow spacing around the `*` in `yield*` expressions\",category:\"ECMAScript 6\",recommended:false},fixable:\"whitespace\",schema:[{oneOf:[{enum:[\"before\",\"after\",\"both\",\"neither\"]},{type:\"object\",properties:{before:{type:\"boolean\"},after:{type:\"boolean\"}},additionalProperties:false}]}]},create:function create(context){var sourceCode=context.getSourceCode();var mode=function(option){if(!option||typeof option===\"string\"){return{before:{before:true,after:false},after:{before:false,after:true},both:{before:true,after:true},neither:{before:false,after:false}}[option||\"after\"];}return option;}(context.options[0]);/**\n         * Checks the spacing between two tokens before or after the star token.\n         * @param {string} side Either \"before\" or \"after\".\n         * @param {Token} leftToken `function` keyword token if side is \"before\", or\n         *     star token if side is \"after\".\n         * @param {Token} rightToken Star token if side is \"before\", or identifier\n         *     token if side is \"after\".\n         * @returns {void}\n         */function checkSpacing(side,leftToken,rightToken){if(sourceCode.isSpaceBetweenTokens(leftToken,rightToken)!==mode[side]){var after=leftToken.value===\"*\";var spaceRequired=mode[side];var node=after?leftToken:rightToken;var type=spaceRequired?\"Missing\":\"Unexpected\";var message=\"{{type}} space {{side}} *.\";context.report({node:node,message:message,data:{type:type,side:side},fix:function fix(fixer){if(spaceRequired){if(after){return fixer.insertTextAfter(node,\" \");}return fixer.insertTextBefore(node,\" \");}return fixer.removeRange([leftToken.range[1],rightToken.range[0]]);}});}}/**\n         * Enforces the spacing around the star if node is a yield* expression.\n         * @param {ASTNode} node A yield expression node.\n         * @returns {void}\n         */function checkExpression(node){if(!node.delegate){return;}var tokens=sourceCode.getFirstTokens(node,3);var yieldToken=tokens[0];var starToken=tokens[1];var nextToken=tokens[2];checkSpacing(\"before\",yieldToken,starToken);checkSpacing(\"after\",starToken,nextToken);}return{YieldExpression:checkExpression};}};},{}],863:[function(require,module,exports){/**\n * @fileoverview Rule to require or disallow yoda comparisons\n * @author Nicholas C. Zakas\n */\"use strict\";//--------------------------------------------------------------------------\n// Requirements\n//--------------------------------------------------------------------------\nvar astUtils=require(\"../ast-utils\");//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n/**\n * Determines whether an operator is a comparison operator.\n * @param {string} operator The operator to check.\n * @returns {boolean} Whether or not it is a comparison operator.\n */function isComparisonOperator(operator){return /^(==|===|!=|!==|<|>|<=|>=)$/.test(operator);}/**\n * Determines whether an operator is an equality operator.\n * @param {string} operator The operator to check.\n * @returns {boolean} Whether or not it is an equality operator.\n */function isEqualityOperator(operator){return /^(==|===)$/.test(operator);}/**\n * Determines whether an operator is one used in a range test.\n * Allowed operators are `<` and `<=`.\n * @param {string} operator The operator to check.\n * @returns {boolean} Whether the operator is used in range tests.\n */function isRangeTestOperator(operator){return[\"<\",\"<=\"].indexOf(operator)>=0;}/**\n * Determines whether a non-Literal node is a negative number that should be\n * treated as if it were a single Literal node.\n * @param {ASTNode} node Node to test.\n * @returns {boolean} True if the node is a negative number that looks like a\n *                    real literal and should be treated as such.\n */function looksLikeLiteral(node){return node.type===\"UnaryExpression\"&&node.operator===\"-\"&&node.prefix&&node.argument.type===\"Literal\"&&typeof node.argument.value===\"number\";}/**\n * Attempts to derive a Literal node from nodes that are treated like literals.\n * @param {ASTNode} node Node to normalize.\n * @param {number} [defaultValue] The default value to be returned if the node\n *                                is not a Literal.\n * @returns {ASTNode} One of the following options.\n *  1. The original node if the node is already a Literal\n *  2. A normalized Literal node with the negative number as the value if the\n *     node represents a negative number literal.\n *  3. The Literal node which has the `defaultValue` argument if it exists.\n *  4. Otherwise `null`.\n */function getNormalizedLiteral(node,defaultValue){if(node.type===\"Literal\"){return node;}if(looksLikeLiteral(node)){return{type:\"Literal\",value:-node.argument.value,raw:\"-\"+node.argument.value};}if(defaultValue){return{type:\"Literal\",value:defaultValue,raw:String(defaultValue)};}return null;}/**\n * Checks whether two expressions reference the same value. For example:\n *     a = a\n *     a.b = a.b\n *     a[0] = a[0]\n *     a['b'] = a['b']\n * @param   {ASTNode} a Left side of the comparison.\n * @param   {ASTNode} b Right side of the comparison.\n * @returns {boolean}   True if both sides match and reference the same value.\n */function same(a,b){if(a.type!==b.type){return false;}switch(a.type){case\"Identifier\":return a.name===b.name;case\"Literal\":return a.value===b.value;case\"MemberExpression\":{var nameA=astUtils.getStaticPropertyName(a);// x.y = x[\"y\"]\nif(nameA){return same(a.object,b.object)&&nameA===astUtils.getStaticPropertyName(b);}// x[0] = x[0]\n// x[y] = x[y]\n// x.y = x.y\nreturn a.computed===b.computed&&same(a.object,b.object)&&same(a.property,b.property);}case\"ThisExpression\":return true;default:return false;}}//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\nmodule.exports={meta:{docs:{description:\"require or disallow \\\"Yoda\\\" conditions\",category:\"Best Practices\",recommended:false},schema:[{enum:[\"always\",\"never\"]},{type:\"object\",properties:{exceptRange:{type:\"boolean\"},onlyEquality:{type:\"boolean\"}},additionalProperties:false}],fixable:\"code\"},create:function create(context){// Default to \"never\" (!always) if no option\nvar always=context.options[0]===\"always\";var exceptRange=context.options[1]&&context.options[1].exceptRange;var onlyEquality=context.options[1]&&context.options[1].onlyEquality;var sourceCode=context.getSourceCode();/**\n         * Determines whether node represents a range test.\n         * A range test is a \"between\" test like `(0 <= x && x < 1)` or an \"outside\"\n         * test like `(x < 0 || 1 <= x)`. It must be wrapped in parentheses, and\n         * both operators must be `<` or `<=`. Finally, the literal on the left side\n         * must be less than or equal to the literal on the right side so that the\n         * test makes any sense.\n         * @param {ASTNode} node LogicalExpression node to test.\n         * @returns {boolean} Whether node is a range test.\n         */function isRangeTest(node){var left=node.left,right=node.right;/**\n             * Determines whether node is of the form `0 <= x && x < 1`.\n             * @returns {boolean} Whether node is a \"between\" range test.\n             */function isBetweenTest(){var leftLiteral=void 0,rightLiteral=void 0;return node.operator===\"&&\"&&(leftLiteral=getNormalizedLiteral(left.left))&&(rightLiteral=getNormalizedLiteral(right.right,Number.POSITIVE_INFINITY))&&leftLiteral.value<=rightLiteral.value&&same(left.right,right.left);}/**\n             * Determines whether node is of the form `x < 0 || 1 <= x`.\n             * @returns {boolean} Whether node is an \"outside\" range test.\n             */function isOutsideTest(){var leftLiteral=void 0,rightLiteral=void 0;return node.operator===\"||\"&&(leftLiteral=getNormalizedLiteral(left.right,Number.NEGATIVE_INFINITY))&&(rightLiteral=getNormalizedLiteral(right.left))&&leftLiteral.value<=rightLiteral.value&&same(left.left,right.right);}/**\n             * Determines whether node is wrapped in parentheses.\n             * @returns {boolean} Whether node is preceded immediately by an open\n             *                    paren token and followed immediately by a close\n             *                    paren token.\n             */function isParenWrapped(){return astUtils.isParenthesised(sourceCode,node);}return node.type===\"LogicalExpression\"&&left.type===\"BinaryExpression\"&&right.type===\"BinaryExpression\"&&isRangeTestOperator(left.operator)&&isRangeTestOperator(right.operator)&&(isBetweenTest()||isOutsideTest())&&isParenWrapped();}var OPERATOR_FLIP_MAP={\"===\":\"===\",\"!==\":\"!==\",\"==\":\"==\",\"!=\":\"!=\",\"<\":\">\",\">\":\"<\",\"<=\":\">=\",\">=\":\"<=\"};/**\n        * Returns a string representation of a BinaryExpression node with its sides/operator flipped around.\n        * @param {ASTNode} node The BinaryExpression node\n        * @returns {string} A string representation of the node with the sides and operator flipped\n        */function getFlippedString(node){var operatorToken=sourceCode.getFirstTokenBetween(node.left,node.right,function(token){return token.value===node.operator;});var textBeforeOperator=sourceCode.getText().slice(sourceCode.getTokenBefore(operatorToken).range[1],operatorToken.range[0]);var textAfterOperator=sourceCode.getText().slice(operatorToken.range[1],sourceCode.getTokenAfter(operatorToken).range[0]);var leftText=sourceCode.getText().slice(node.range[0],sourceCode.getTokenBefore(operatorToken).range[1]);var rightText=sourceCode.getText().slice(sourceCode.getTokenAfter(operatorToken).range[0],node.range[1]);return rightText+textBeforeOperator+OPERATOR_FLIP_MAP[operatorToken.value]+textAfterOperator+leftText;}//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\nreturn{BinaryExpression:function BinaryExpression(node){var expectedLiteral=always?node.left:node.right;var expectedNonLiteral=always?node.right:node.left;// If `expectedLiteral` is not a literal, and `expectedNonLiteral` is a literal, raise an error.\nif((expectedNonLiteral.type===\"Literal\"||looksLikeLiteral(expectedNonLiteral))&&!(expectedLiteral.type===\"Literal\"||looksLikeLiteral(expectedLiteral))&&!(!isEqualityOperator(node.operator)&&onlyEquality)&&isComparisonOperator(node.operator)&&!(exceptRange&&isRangeTest(context.getAncestors().pop()))){context.report({node:node,message:\"Expected literal to be on the {{expectedSide}} side of {{operator}}.\",data:{operator:node.operator,expectedSide:always?\"left\":\"right\"},fix:function fix(fixer){return fixer.replaceText(node,getFlippedString(node));}});}}};}};},{\"../ast-utils\":605}],864:[function(require,module,exports){(function(process){/**\n * @fileoverview Tracks performance of individual rules.\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/* istanbul ignore next *//**\n * Align the string to left\n * @param {string} str string to evaluate\n * @param {int} len length of the string\n * @param {string} ch delimiter character\n * @returns {string} modified string\n * @private\n */function alignLeft(str,len,ch){return str+new Array(len-str.length+1).join(ch||\" \");}/* istanbul ignore next *//**\n * Align the string to right\n * @param {string} str string to evaluate\n * @param {int} len length of the string\n * @param {string} ch delimiter character\n * @returns {string} modified string\n * @private\n */function alignRight(str,len,ch){return new Array(len-str.length+1).join(ch||\" \")+str;}//------------------------------------------------------------------------------\n// Module definition\n//------------------------------------------------------------------------------\nvar enabled=!!process.env.TIMING;var HEADERS=[\"Rule\",\"Time (ms)\",\"Relative\"];var ALIGN=[alignLeft,alignRight,alignRight];/* istanbul ignore next *//**\n * display the data\n * @param {Object} data Data object to be displayed\n * @returns {string} modified string\n * @private\n */function display(data){var total=0;var rows=(0,_keys4.default)(data).map(function(key){var time=data[key];total+=time;return[key,time];}).sort(function(a,b){return b[1]-a[1];}).slice(0,10);rows.forEach(function(row){row.push((row[1]*100/total).toFixed(1)+\"%\");row[1]=row[1].toFixed(3);});rows.unshift(HEADERS);var widths=[];rows.forEach(function(row){var len=row.length;for(var i=0;i<len;i++){var n=row[i].length;if(!widths[i]||n>widths[i]){widths[i]=n;}}});var table=rows.map(function(row){return row.map(function(cell,index){return ALIGN[index](cell,widths[index]);}).join(\" | \");});table.splice(1,0,widths.map(function(w,index){if(index!==0&&index!==widths.length-1){w++;}return ALIGN[index](\":\",w+1,\"-\");}).join(\"|\"));console.log(table.join(\"\\n\"));// eslint-disable-line no-console\n}/* istanbul ignore next */module.exports=function(){var data=(0,_create4.default)(null);/**\n     * Time the run\n     * @param {*} key key from the data object\n     * @param {Function} fn function to be called\n     * @returns {Function} function to be executed\n     * @private\n     */function time(key,fn){if(typeof data[key]===\"undefined\"){data[key]=0;}return function(){var t=process.hrtime();fn.apply(null,Array.prototype.slice.call(arguments));t=process.hrtime(t);data[key]+=t[0]*1e3+t[1]/1e6;};}if(enabled){process.on(\"exit\",function(){display(data);});}return{time:time,enabled:enabled};}();}).call(this,require(\"_process\"));},{\"_process\":594}],865:[function(require,module,exports){/**\n * @fileoverview Define the cursor which iterates tokens and comments in reverse.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var Cursor=require(\"./cursor\");var utils=require(\"./utils\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The cursor which iterates tokens and comments in reverse.\n */module.exports=function(_Cursor){_inherits(BackwardTokenCommentCursor,_Cursor);/**\n     * Initializes this cursor.\n     * @param {Token[]} tokens - The array of tokens.\n     * @param {Comment[]} comments - The array of comments.\n     * @param {Object} indexMap - The map from locations to indices in `tokens`.\n     * @param {number} startLoc - The start location of the iteration range.\n     * @param {number} endLoc - The end location of the iteration range.\n     */function BackwardTokenCommentCursor(tokens,comments,indexMap,startLoc,endLoc){_classCallCheck(this,BackwardTokenCommentCursor);var _this=_possibleConstructorReturn(this,(BackwardTokenCommentCursor.__proto__||(0,_getPrototypeOf2.default)(BackwardTokenCommentCursor)).call(this));_this.tokens=tokens;_this.comments=comments;_this.tokenIndex=utils.getLastIndex(tokens,indexMap,endLoc);_this.commentIndex=utils.search(comments,endLoc)-1;_this.border=startLoc;return _this;}/** @inheritdoc */_createClass(BackwardTokenCommentCursor,[{key:\"moveNext\",value:function moveNext(){var token=this.tokenIndex>=0?this.tokens[this.tokenIndex]:null;var comment=this.commentIndex>=0?this.comments[this.commentIndex]:null;if(token&&(!comment||token.range[1]>comment.range[1])){this.current=token;this.tokenIndex-=1;}else if(comment){this.current=comment;this.commentIndex-=1;}else{this.current=null;}return Boolean(this.current)&&(this.border===-1||this.current.range[0]>=this.border);}}]);return BackwardTokenCommentCursor;}(Cursor);},{\"./cursor\":867,\"./utils\":877}],866:[function(require,module,exports){/**\n * @fileoverview Define the cursor which iterates tokens only in reverse.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var Cursor=require(\"./cursor\");var utils=require(\"./utils\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The cursor which iterates tokens only in reverse.\n */module.exports=function(_Cursor){_inherits(BackwardTokenCursor,_Cursor);/**\n     * Initializes this cursor.\n     * @param {Token[]} tokens - The array of tokens.\n     * @param {Comment[]} comments - The array of comments.\n     * @param {Object} indexMap - The map from locations to indices in `tokens`.\n     * @param {number} startLoc - The start location of the iteration range.\n     * @param {number} endLoc - The end location of the iteration range.\n     */function BackwardTokenCursor(tokens,comments,indexMap,startLoc,endLoc){_classCallCheck(this,BackwardTokenCursor);var _this=_possibleConstructorReturn(this,(BackwardTokenCursor.__proto__||(0,_getPrototypeOf2.default)(BackwardTokenCursor)).call(this));_this.tokens=tokens;_this.index=utils.getLastIndex(tokens,indexMap,endLoc);_this.indexEnd=utils.getFirstIndex(tokens,indexMap,startLoc);return _this;}/** @inheritdoc */_createClass(BackwardTokenCursor,[{key:\"moveNext\",value:function moveNext(){if(this.index>=this.indexEnd){this.current=this.tokens[this.index];this.index-=1;return true;}return false;}//\n// Shorthand for performance.\n//\n/** @inheritdoc */},{key:\"getOneToken\",value:function getOneToken(){return this.index>=this.indexEnd?this.tokens[this.index]:null;}}]);return BackwardTokenCursor;}(Cursor);},{\"./cursor\":867,\"./utils\":877}],867:[function(require,module,exports){/**\n * @fileoverview Define the abstract class about cursors which iterate tokens.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The abstract class about cursors which iterate tokens.\n *\n * This class has 2 abstract methods.\n *\n * - `current: Token | Comment | null` ... The current token.\n * - `moveNext(): boolean` ... Moves this cursor to the next token. If the next token didn't exist, it returns `false`.\n *\n * This is similar to ES2015 Iterators.\n * However, Iterators were slow (at 2017-01), so I created this class as similar to C# IEnumerable.\n *\n * There are the following known sub classes.\n *\n * - ForwardTokenCursor .......... The cursor which iterates tokens only.\n * - BackwardTokenCursor ......... The cursor which iterates tokens only in reverse.\n * - ForwardTokenCommentCursor ... The cursor which iterates tokens and comments.\n * - BackwardTokenCommentCursor .. The cursor which iterates tokens and comments in reverse.\n * - DecorativeCursor\n *     - FilterCursor ............ The cursor which ignores the specified tokens.\n *     - SkipCursor .............. The cursor which ignores the first few tokens.\n *     - LimitCursor ............. The cursor which limits the count of tokens.\n *\n */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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}module.exports=function(){/**\n   * Initializes this cursor.\n   */function Cursor(){_classCallCheck(this,Cursor);this.current=null;}/**\n   * Gets the first token.\n   * This consumes this cursor.\n   * @returns {Token|Comment} The first token or null.\n   */_createClass(Cursor,[{key:\"getOneToken\",value:function getOneToken(){return this.moveNext()?this.current:null;}/**\n     * Gets the first tokens.\n     * This consumes this cursor.\n     * @returns {(Token|Comment)[]} All tokens.\n     */},{key:\"getAllTokens\",value:function getAllTokens(){var tokens=[];while(this.moveNext()){tokens.push(this.current);}return tokens;}/**\n     * Moves this cursor to the next token.\n     * @returns {boolean} `true` if the next token exists.\n     * @abstract\n     *//* istanbul ignore next */},{key:\"moveNext\",value:function moveNext(){// eslint-disable-line class-methods-use-this\nthrow new Error(\"Not implemented.\");}}]);return Cursor;}();},{}],868:[function(require,module,exports){/**\n * @fileoverview Define 2 token factories; forward and backward.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var BackwardTokenCommentCursor=require(\"./backward-token-comment-cursor\");var BackwardTokenCursor=require(\"./backward-token-cursor\");var FilterCursor=require(\"./filter-cursor\");var ForwardTokenCommentCursor=require(\"./forward-token-comment-cursor\");var ForwardTokenCursor=require(\"./forward-token-cursor\");var LimitCursor=require(\"./limit-cursor\");var SkipCursor=require(\"./skip-cursor\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * The cursor factory.\n * @private\n */var CursorFactory=function(){/**\n     * Initializes this cursor.\n     * @param {Function} TokenCursor - The class of the cursor which iterates tokens only.\n     * @param {Function} TokenCommentCursor - The class of the cursor which iterates the mix of tokens and comments.\n     */function CursorFactory(TokenCursor,TokenCommentCursor){_classCallCheck(this,CursorFactory);this.TokenCursor=TokenCursor;this.TokenCommentCursor=TokenCommentCursor;}/**\n     * Creates a base cursor instance that can be decorated by createCursor.\n     *\n     * @param {Token[]} tokens - The array of tokens.\n     * @param {Comment[]} comments - The array of comments.\n     * @param {Object} indexMap - The map from locations to indices in `tokens`.\n     * @param {number} startLoc - The start location of the iteration range.\n     * @param {number} endLoc - The end location of the iteration range.\n     * @param {boolean} includeComments - The flag to iterate comments as well.\n     * @returns {Cursor} The created base cursor.\n     */_createClass(CursorFactory,[{key:\"createBaseCursor\",value:function createBaseCursor(tokens,comments,indexMap,startLoc,endLoc,includeComments){var Cursor=includeComments?this.TokenCommentCursor:this.TokenCursor;return new Cursor(tokens,comments,indexMap,startLoc,endLoc);}/**\n         * Creates a cursor that iterates tokens with normalized options.\n         *\n         * @param {Token[]} tokens - The array of tokens.\n         * @param {Comment[]} comments - The array of comments.\n         * @param {Object} indexMap - The map from locations to indices in `tokens`.\n         * @param {number} startLoc - The start location of the iteration range.\n         * @param {number} endLoc - The end location of the iteration range.\n         * @param {boolean} includeComments - The flag to iterate comments as well.\n         * @param {Function|null} filter - The predicate function to choose tokens.\n         * @param {number} skip - The count of tokens the cursor skips.\n         * @param {number} count - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n         * @returns {Cursor} The created cursor.\n         */},{key:\"createCursor\",value:function createCursor(tokens,comments,indexMap,startLoc,endLoc,includeComments,filter,skip,count){var cursor=this.createBaseCursor(tokens,comments,indexMap,startLoc,endLoc,includeComments);if(filter){cursor=new FilterCursor(cursor,filter);}if(skip>=1){cursor=new SkipCursor(cursor,skip);}if(count>=0){cursor=new LimitCursor(cursor,count);}return cursor;}}]);return CursorFactory;}();//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\nexports.forward=new CursorFactory(ForwardTokenCursor,ForwardTokenCommentCursor);exports.backward=new CursorFactory(BackwardTokenCursor,BackwardTokenCommentCursor);},{\"./backward-token-comment-cursor\":865,\"./backward-token-cursor\":866,\"./filter-cursor\":870,\"./forward-token-comment-cursor\":871,\"./forward-token-cursor\":872,\"./limit-cursor\":874,\"./skip-cursor\":876}],869:[function(require,module,exports){/**\n * @fileoverview Define the abstract class about cursors which manipulate another cursor.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var Cursor=require(\"./cursor\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The abstract class about cursors which manipulate another cursor.\n */module.exports=function(_Cursor){_inherits(DecorativeCursor,_Cursor);/**\n   * Initializes this cursor.\n   * @param {Cursor} cursor - The cursor to be decorated.\n   */function DecorativeCursor(cursor){_classCallCheck(this,DecorativeCursor);var _this=_possibleConstructorReturn(this,(DecorativeCursor.__proto__||(0,_getPrototypeOf2.default)(DecorativeCursor)).call(this));_this.cursor=cursor;return _this;}/** @inheritdoc */_createClass(DecorativeCursor,[{key:\"moveNext\",value:function moveNext(){var retv=this.cursor.moveNext();this.current=this.cursor.current;return retv;}}]);return DecorativeCursor;}(Cursor);},{\"./cursor\":867}],870:[function(require,module,exports){/**\n * @fileoverview Define the cursor which ignores specified tokens.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var _get=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=(0,_getOwnPropertyDescriptor2.default)(object,property);if(desc===undefined){var parent=(0,_getPrototypeOf2.default)(object);if(parent===null){return undefined;}else{return get(parent,property,receiver);}}else if(\"value\"in desc){return desc.value;}else{var getter=desc.get;if(getter===undefined){return undefined;}return getter.call(receiver);}};function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var DecorativeCursor=require(\"./decorative-cursor\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The decorative cursor which ignores specified tokens.\n */module.exports=function(_DecorativeCursor){_inherits(FilterCursor,_DecorativeCursor);/**\n     * Initializes this cursor.\n     * @param {Cursor} cursor - The cursor to be decorated.\n     * @param {Function} predicate - The predicate function to decide tokens this cursor iterates.\n     */function FilterCursor(cursor,predicate){_classCallCheck(this,FilterCursor);var _this=_possibleConstructorReturn(this,(FilterCursor.__proto__||(0,_getPrototypeOf2.default)(FilterCursor)).call(this,cursor));_this.predicate=predicate;return _this;}/** @inheritdoc */_createClass(FilterCursor,[{key:\"moveNext\",value:function moveNext(){var predicate=this.predicate;while(_get(FilterCursor.prototype.__proto__||(0,_getPrototypeOf2.default)(FilterCursor.prototype),\"moveNext\",this).call(this)){if(predicate(this.current)){return true;}}return false;}}]);return FilterCursor;}(DecorativeCursor);},{\"./decorative-cursor\":869}],871:[function(require,module,exports){/**\n * @fileoverview Define the cursor which iterates tokens and comments.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var Cursor=require(\"./cursor\");var utils=require(\"./utils\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The cursor which iterates tokens and comments.\n */module.exports=function(_Cursor){_inherits(ForwardTokenCommentCursor,_Cursor);/**\n     * Initializes this cursor.\n     * @param {Token[]} tokens - The array of tokens.\n     * @param {Comment[]} comments - The array of comments.\n     * @param {Object} indexMap - The map from locations to indices in `tokens`.\n     * @param {number} startLoc - The start location of the iteration range.\n     * @param {number} endLoc - The end location of the iteration range.\n     */function ForwardTokenCommentCursor(tokens,comments,indexMap,startLoc,endLoc){_classCallCheck(this,ForwardTokenCommentCursor);var _this=_possibleConstructorReturn(this,(ForwardTokenCommentCursor.__proto__||(0,_getPrototypeOf2.default)(ForwardTokenCommentCursor)).call(this));_this.tokens=tokens;_this.comments=comments;_this.tokenIndex=utils.getFirstIndex(tokens,indexMap,startLoc);_this.commentIndex=utils.search(comments,startLoc);_this.border=endLoc;return _this;}/** @inheritdoc */_createClass(ForwardTokenCommentCursor,[{key:\"moveNext\",value:function moveNext(){var token=this.tokenIndex<this.tokens.length?this.tokens[this.tokenIndex]:null;var comment=this.commentIndex<this.comments.length?this.comments[this.commentIndex]:null;if(token&&(!comment||token.range[0]<comment.range[0])){this.current=token;this.tokenIndex+=1;}else if(comment){this.current=comment;this.commentIndex+=1;}else{this.current=null;}return Boolean(this.current)&&(this.border===-1||this.current.range[1]<=this.border);}}]);return ForwardTokenCommentCursor;}(Cursor);},{\"./cursor\":867,\"./utils\":877}],872:[function(require,module,exports){/**\n * @fileoverview Define the cursor which iterates tokens only.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var Cursor=require(\"./cursor\");var utils=require(\"./utils\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The cursor which iterates tokens only.\n */module.exports=function(_Cursor){_inherits(ForwardTokenCursor,_Cursor);/**\n     * Initializes this cursor.\n     * @param {Token[]} tokens - The array of tokens.\n     * @param {Comment[]} comments - The array of comments.\n     * @param {Object} indexMap - The map from locations to indices in `tokens`.\n     * @param {number} startLoc - The start location of the iteration range.\n     * @param {number} endLoc - The end location of the iteration range.\n     */function ForwardTokenCursor(tokens,comments,indexMap,startLoc,endLoc){_classCallCheck(this,ForwardTokenCursor);var _this=_possibleConstructorReturn(this,(ForwardTokenCursor.__proto__||(0,_getPrototypeOf2.default)(ForwardTokenCursor)).call(this));_this.tokens=tokens;_this.index=utils.getFirstIndex(tokens,indexMap,startLoc);_this.indexEnd=utils.getLastIndex(tokens,indexMap,endLoc);return _this;}/** @inheritdoc */_createClass(ForwardTokenCursor,[{key:\"moveNext\",value:function moveNext(){if(this.index<=this.indexEnd){this.current=this.tokens[this.index];this.index+=1;return true;}return false;}//\n// Shorthand for performance.\n//\n/** @inheritdoc */},{key:\"getOneToken\",value:function getOneToken(){return this.index<=this.indexEnd?this.tokens[this.index]:null;}/** @inheritdoc */},{key:\"getAllTokens\",value:function getAllTokens(){return this.tokens.slice(this.index,this.indexEnd+1);}}]);return ForwardTokenCursor;}(Cursor);},{\"./cursor\":867,\"./utils\":877}],873:[function(require,module,exports){/**\n * @fileoverview Object to handle access and retrieval of tokens.\n * @author Brandon Mills\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var assert=require(\"assert\");var cursors=require(\"./cursors\");var ForwardTokenCursor=require(\"./forward-token-cursor\");var PaddedTokenCursor=require(\"./padded-token-cursor\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar PUBLIC_METHODS=(0,_freeze2.default)([\"getTokenByRangeStart\",\"getFirstToken\",\"getLastToken\",\"getTokenBefore\",\"getTokenAfter\",\"getFirstTokenBetween\",\"getLastTokenBetween\",\"getFirstTokens\",\"getLastTokens\",\"getTokensBefore\",\"getTokensAfter\",\"getFirstTokensBetween\",\"getLastTokensBetween\",\"getTokens\",\"getTokensBetween\",\"getTokenOrCommentBefore\",\"getTokenOrCommentAfter\"]);/**\n * Creates the map from locations to indices in `tokens`.\n *\n * The first/last location of tokens is mapped to the index of the token.\n * The first/last location of comments is mapped to the index of the next token of each comment.\n *\n * @param {Token[]} tokens - The array of tokens.\n * @param {Comment[]} comments - The array of comments.\n * @returns {Object} The map from locations to indices in `tokens`.\n * @private\n */function createIndexMap(tokens,comments){var map=(0,_create4.default)(null);var tokenIndex=0;var commentIndex=0;var nextStart=0;var range=null;while(tokenIndex<tokens.length||commentIndex<comments.length){nextStart=commentIndex<comments.length?comments[commentIndex].range[0]:_maxSafeInteger4.default;while(tokenIndex<tokens.length&&(range=tokens[tokenIndex].range)[0]<nextStart){map[range[0]]=tokenIndex;map[range[1]-1]=tokenIndex;tokenIndex+=1;}nextStart=tokenIndex<tokens.length?tokens[tokenIndex].range[0]:_maxSafeInteger4.default;while(commentIndex<comments.length&&(range=comments[commentIndex].range)[0]<nextStart){map[range[0]]=tokenIndex;map[range[1]-1]=tokenIndex;commentIndex+=1;}}return map;}/**\n * Creates the cursor iterates tokens with options.\n *\n * @param {CursorFactory} factory - The cursor factory to initialize cursor.\n * @param {Token[]} tokens - The array of tokens.\n * @param {Comment[]} comments - The array of comments.\n * @param {Object} indexMap - The map from locations to indices in `tokens`.\n * @param {number} startLoc - The start location of the iteration range.\n * @param {number} endLoc - The end location of the iteration range.\n * @param {number|Function|Object} [opts=0] - The option object. If this is a number then it's `opts.skip`. If this is a function then it's `opts.filter`.\n * @param {boolean} [opts.includeComments=false] - The flag to iterate comments as well.\n * @param {Function|null} [opts.filter=null] - The predicate function to choose tokens.\n * @param {number} [opts.skip=0] - The count of tokens the cursor skips.\n * @returns {Cursor} The created cursor.\n * @private\n */function createCursorWithSkip(factory,tokens,comments,indexMap,startLoc,endLoc,opts){var includeComments=false;var skip=0;var filter=null;if(typeof opts===\"number\"){skip=opts|0;}else if(typeof opts===\"function\"){filter=opts;}else if(opts){includeComments=!!opts.includeComments;skip=opts.skip|0;filter=opts.filter||null;}assert(skip>=0,\"options.skip should be zero or a positive integer.\");assert(!filter||typeof filter===\"function\",\"options.filter should be a function.\");return factory.createCursor(tokens,comments,indexMap,startLoc,endLoc,includeComments,filter,skip,-1);}/**\n * Creates the cursor iterates tokens with options.\n *\n * @param {CursorFactory} factory - The cursor factory to initialize cursor.\n * @param {Token[]} tokens - The array of tokens.\n * @param {Comment[]} comments - The array of comments.\n * @param {Object} indexMap - The map from locations to indices in `tokens`.\n * @param {number} startLoc - The start location of the iteration range.\n * @param {number} endLoc - The end location of the iteration range.\n * @param {number|Function|Object} [opts=0] - The option object. If this is a number then it's `opts.count`. If this is a function then it's `opts.filter`.\n * @param {boolean} [opts.includeComments] - The flag to iterate comments as well.\n * @param {Function|null} [opts.filter=null] - The predicate function to choose tokens.\n * @param {number} [opts.count=0] - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n * @returns {Cursor} The created cursor.\n * @private\n */function createCursorWithCount(factory,tokens,comments,indexMap,startLoc,endLoc,opts){var includeComments=false;var count=0;var countExists=false;var filter=null;if(typeof opts===\"number\"){count=opts|0;countExists=true;}else if(typeof opts===\"function\"){filter=opts;}else if(opts){includeComments=!!opts.includeComments;count=opts.count|0;countExists=typeof opts.count===\"number\";filter=opts.filter||null;}assert(count>=0,\"options.count should be zero or a positive integer.\");assert(!filter||typeof filter===\"function\",\"options.filter should be a function.\");return factory.createCursor(tokens,comments,indexMap,startLoc,endLoc,includeComments,filter,0,countExists?count:-1);}/**\n * Creates the cursor iterates tokens with options.\n * This is overload function of the below.\n *\n * @param {Token[]} tokens - The array of tokens.\n * @param {Comment[]} comments - The array of comments.\n * @param {Object} indexMap - The map from locations to indices in `tokens`.\n * @param {number} startLoc - The start location of the iteration range.\n * @param {number} endLoc - The end location of the iteration range.\n * @param {Function|Object} opts - The option object. If this is a function then it's `opts.filter`.\n * @param {boolean} [opts.includeComments] - The flag to iterate comments as well.\n * @param {Function|null} [opts.filter=null] - The predicate function to choose tokens.\n * @param {number} [opts.count=0] - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n * @returns {Cursor} The created cursor.\n * @private\n *//**\n * Creates the cursor iterates tokens with options.\n *\n * @param {Token[]} tokens - The array of tokens.\n * @param {Comment[]} comments - The array of comments.\n * @param {Object} indexMap - The map from locations to indices in `tokens`.\n * @param {number} startLoc - The start location of the iteration range.\n * @param {number} endLoc - The end location of the iteration range.\n * @param {number} [beforeCount=0] - The number of tokens before the node to retrieve.\n * @param {boolean} [afterCount=0] - The number of tokens after the node to retrieve.\n * @returns {Cursor} The created cursor.\n * @private\n */function createCursorWithPadding(tokens,comments,indexMap,startLoc,endLoc,beforeCount,afterCount){if(typeof beforeCount===\"undefined\"&&typeof afterCount===\"undefined\"){return new ForwardTokenCursor(tokens,comments,indexMap,startLoc,endLoc);}if(typeof beforeCount===\"number\"||typeof beforeCount===\"undefined\"){return new PaddedTokenCursor(tokens,comments,indexMap,startLoc,endLoc,beforeCount|0,afterCount|0);}return createCursorWithCount(cursors.forward,tokens,comments,indexMap,startLoc,endLoc,beforeCount);}//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The token store.\n *\n * This class provides methods to get tokens by locations as fast as possible.\n * The methods are a part of public API, so we should be careful if it changes this class.\n *\n * People can get tokens in O(1) by the hash map which is mapping from the location of tokens/comments to tokens.\n * Also people can get a mix of tokens and comments in O(log k), the k is the number of comments.\n * Assuming that comments to be much fewer than tokens, this does not make hash map from token's locations to comments to reduce memory cost.\n * This uses binary-searching instead for comments.\n */module.exports=function(){/**\n     * Initializes this token store.\n     *\n     * ※ `comments` needs to be cloned for backward compatibility.\n     * After this initialization, ESLint removes a shebang's comment from `comments`.\n     * However, so far we had been concatenating 'tokens' and 'comments' before,\n     * so the shebang's comment had remained in the concatenated array.\n     * As a result, both the result of `getTokenOrCommentAfter` and `getTokenOrCommentBefore`\n     * methods had included the shebang's comment.\n     * And some rules depends on this behavior.\n     *\n     * @param {Token[]} tokens - The array of tokens.\n     * @param {Comment[]} comments - The array of comments.\n     */function TokenStore(tokens,comments){_classCallCheck(this,TokenStore);this.tokens=tokens;this.comments=comments.slice(0);this.indexMap=createIndexMap(tokens,comments);}//--------------------------------------------------------------------------\n// Gets single token.\n//--------------------------------------------------------------------------\n/**\n     * Gets the token starting at the specified index.\n     * @param {number} offset - Index of the start of the token's range.\n     * @param {Object} [options=0] - The option object.\n     * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n     * @returns {Token|null} The token starting at index, or null if no such token.\n     */_createClass(TokenStore,[{key:\"getTokenByRangeStart\",value:function getTokenByRangeStart(offset,options){var includeComments=options&&options.includeComments;var token=cursors.forward.createBaseCursor(this.tokens,this.comments,this.indexMap,offset,-1,includeComments).getOneToken();if(token&&token.range[0]===offset){return token;}return null;}/**\n         * Gets the first token of the given node.\n         * @param {ASTNode} node - The AST node.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.skip=0] - The count of tokens the cursor skips.\n         * @returns {Token|null} An object representing the token.\n         */},{key:\"getFirstToken\",value:function getFirstToken(node,options){return createCursorWithSkip(cursors.forward,this.tokens,this.comments,this.indexMap,node.range[0],node.range[1],options).getOneToken();}/**\n         * Gets the last token of the given node.\n         * @param {ASTNode} node - The AST node.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.skip=0] - The count of tokens the cursor skips.\n         * @returns {Token|null} An object representing the token.\n         */},{key:\"getLastToken\",value:function getLastToken(node,options){return createCursorWithSkip(cursors.backward,this.tokens,this.comments,this.indexMap,node.range[0],node.range[1],options).getOneToken();}/**\n         * Gets the token that precedes a given node or token.\n         * @param {ASTNode|Token|Comment} node - The AST node or token.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.skip=0] - The count of tokens the cursor skips.\n         * @returns {Token|null} An object representing the token.\n         */},{key:\"getTokenBefore\",value:function getTokenBefore(node,options){return createCursorWithSkip(cursors.backward,this.tokens,this.comments,this.indexMap,-1,node.range[0],options).getOneToken();}/**\n         * Gets the token that follows a given node or token.\n         * @param {ASTNode|Token|Comment} node - The AST node or token.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.skip=0] - The count of tokens the cursor skips.\n         * @returns {Token|null} An object representing the token.\n         */},{key:\"getTokenAfter\",value:function getTokenAfter(node,options){return createCursorWithSkip(cursors.forward,this.tokens,this.comments,this.indexMap,node.range[1],-1,options).getOneToken();}/**\n         * Gets the first token between two non-overlapping nodes.\n         * @param {ASTNode|Token|Comment} left - Node before the desired token range.\n         * @param {ASTNode|Token|Comment} right - Node after the desired token range.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.skip=0] - The count of tokens the cursor skips.\n         * @returns {Token|null} An object representing the token.\n         */},{key:\"getFirstTokenBetween\",value:function getFirstTokenBetween(left,right,options){return createCursorWithSkip(cursors.forward,this.tokens,this.comments,this.indexMap,left.range[1],right.range[0],options).getOneToken();}/**\n         * Gets the last token between two non-overlapping nodes.\n         * @param {ASTNode|Token|Comment} left Node before the desired token range.\n         * @param {ASTNode|Token|Comment} right Node after the desired token range.\n         * @param {number|Function|Object} [options=0] The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.skip=0] - The count of tokens the cursor skips.\n         * @returns {Token|null} Tokens between left and right.\n         */},{key:\"getLastTokenBetween\",value:function getLastTokenBetween(left,right,options){return createCursorWithSkip(cursors.backward,this.tokens,this.comments,this.indexMap,left.range[1],right.range[0],options).getOneToken();}/**\n         * Gets the token that precedes a given node or token in the token stream.\n         * This is defined for backward compatibility. Use `includeComments` option instead.\n         * TODO: We have a plan to remove this in a future major version.\n         * @param {ASTNode|Token|Comment} node The AST node or token.\n         * @param {number} [skip=0] A number of tokens to skip.\n         * @returns {Token|null} An object representing the token.\n         * @deprecated\n         */},{key:\"getTokenOrCommentBefore\",value:function getTokenOrCommentBefore(node,skip){return this.getTokenBefore(node,{includeComments:true,skip:skip});}/**\n         * Gets the token that follows a given node or token in the token stream.\n         * This is defined for backward compatibility. Use `includeComments` option instead.\n         * TODO: We have a plan to remove this in a future major version.\n         * @param {ASTNode|Token|Comment} node The AST node or token.\n         * @param {number} [skip=0] A number of tokens to skip.\n         * @returns {Token|null} An object representing the token.\n         * @deprecated\n         */},{key:\"getTokenOrCommentAfter\",value:function getTokenOrCommentAfter(node,skip){return this.getTokenAfter(node,{includeComments:true,skip:skip});}//--------------------------------------------------------------------------\n// Gets multiple tokens.\n//--------------------------------------------------------------------------\n/**\n         * Gets the first `count` tokens of the given node.\n         * @param {ASTNode} node - The AST node.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates.\n         * @returns {Token[]} Tokens.\n         */},{key:\"getFirstTokens\",value:function getFirstTokens(node,options){return createCursorWithCount(cursors.forward,this.tokens,this.comments,this.indexMap,node.range[0],node.range[1],options).getAllTokens();}/**\n         * Gets the last `count` tokens of the given node.\n         * @param {ASTNode} node - The AST node.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates.\n         * @returns {Token[]} Tokens.\n         */},{key:\"getLastTokens\",value:function getLastTokens(node,options){return createCursorWithCount(cursors.backward,this.tokens,this.comments,this.indexMap,node.range[0],node.range[1],options).getAllTokens().reverse();}/**\n         * Gets the `count` tokens that precedes a given node or token.\n         * @param {ASTNode|Token|Comment} node - The AST node or token.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates.\n         * @returns {Token[]} Tokens.\n         */},{key:\"getTokensBefore\",value:function getTokensBefore(node,options){return createCursorWithCount(cursors.backward,this.tokens,this.comments,this.indexMap,-1,node.range[0],options).getAllTokens().reverse();}/**\n         * Gets the `count` tokens that follows a given node or token.\n         * @param {ASTNode|Token|Comment} node - The AST node or token.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates.\n         * @returns {Token[]} Tokens.\n         */},{key:\"getTokensAfter\",value:function getTokensAfter(node,options){return createCursorWithCount(cursors.forward,this.tokens,this.comments,this.indexMap,node.range[1],-1,options).getAllTokens();}/**\n         * Gets the first `count` tokens between two non-overlapping nodes.\n         * @param {ASTNode|Token|Comment} left - Node before the desired token range.\n         * @param {ASTNode|Token|Comment} right - Node after the desired token range.\n         * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates.\n         * @returns {Token[]} Tokens between left and right.\n         */},{key:\"getFirstTokensBetween\",value:function getFirstTokensBetween(left,right,options){return createCursorWithCount(cursors.forward,this.tokens,this.comments,this.indexMap,left.range[1],right.range[0],options).getAllTokens();}/**\n         * Gets the last `count` tokens between two non-overlapping nodes.\n         * @param {ASTNode|Token|Comment} left Node before the desired token range.\n         * @param {ASTNode|Token|Comment} right Node after the desired token range.\n         * @param {number|Function|Object} [options=0] The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates.\n         * @returns {Token[]} Tokens between left and right.\n         */},{key:\"getLastTokensBetween\",value:function getLastTokensBetween(left,right,options){return createCursorWithCount(cursors.backward,this.tokens,this.comments,this.indexMap,left.range[1],right.range[0],options).getAllTokens().reverse();}/**\n         * Gets all tokens that are related to the given node.\n         * @param {ASTNode} node - The AST node.\n         * @param {Function|Object} options The option object. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates.\n         * @returns {Token[]} Array of objects representing tokens.\n         *//**\n         * Gets all tokens that are related to the given node.\n         * @param {ASTNode} node - The AST node.\n         * @param {int} [beforeCount=0] - The number of tokens before the node to retrieve.\n         * @param {int} [afterCount=0] - The number of tokens after the node to retrieve.\n         * @returns {Token[]} Array of objects representing tokens.\n         */},{key:\"getTokens\",value:function getTokens(node,beforeCount,afterCount){return createCursorWithPadding(this.tokens,this.comments,this.indexMap,node.range[0],node.range[1],beforeCount,afterCount).getAllTokens();}/**\n         * Gets all of the tokens between two non-overlapping nodes.\n         * @param {ASTNode|Token|Comment} left Node before the desired token range.\n         * @param {ASTNode|Token|Comment} right Node after the desired token range.\n         * @param {Function|Object} options The option object. If this is a function then it's `options.filter`.\n         * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well.\n         * @param {Function|null} [options.filter=null] - The predicate function to choose tokens.\n         * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates.\n         * @returns {Token[]} Tokens between left and right.\n         *//**\n         * Gets all of the tokens between two non-overlapping nodes.\n         * @param {ASTNode|Token|Comment} left Node before the desired token range.\n         * @param {ASTNode|Token|Comment} right Node after the desired token range.\n         * @param {int} [padding=0] Number of extra tokens on either side of center.\n         * @returns {Token[]} Tokens between left and right.\n         */},{key:\"getTokensBetween\",value:function getTokensBetween(left,right,padding){return createCursorWithPadding(this.tokens,this.comments,this.indexMap,left.range[1],right.range[0],padding,padding).getAllTokens();}}]);return TokenStore;}();module.exports.PUBLIC_METHODS=PUBLIC_METHODS;},{\"./cursors\":868,\"./forward-token-cursor\":872,\"./padded-token-cursor\":875,\"assert\":11}],874:[function(require,module,exports){/**\n * @fileoverview Define the cursor which limits the number of tokens.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var _get=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=(0,_getOwnPropertyDescriptor2.default)(object,property);if(desc===undefined){var parent=(0,_getPrototypeOf2.default)(object);if(parent===null){return undefined;}else{return get(parent,property,receiver);}}else if(\"value\"in desc){return desc.value;}else{var getter=desc.get;if(getter===undefined){return undefined;}return getter.call(receiver);}};function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var DecorativeCursor=require(\"./decorative-cursor\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The decorative cursor which limits the number of tokens.\n */module.exports=function(_DecorativeCursor){_inherits(LimitCursor,_DecorativeCursor);/**\n     * Initializes this cursor.\n     * @param {Cursor} cursor - The cursor to be decorated.\n     * @param {number} count - The count of tokens this cursor iterates.\n     */function LimitCursor(cursor,count){_classCallCheck(this,LimitCursor);var _this=_possibleConstructorReturn(this,(LimitCursor.__proto__||(0,_getPrototypeOf2.default)(LimitCursor)).call(this,cursor));_this.count=count;return _this;}/** @inheritdoc */_createClass(LimitCursor,[{key:\"moveNext\",value:function moveNext(){if(this.count>0){this.count-=1;return _get(LimitCursor.prototype.__proto__||(0,_getPrototypeOf2.default)(LimitCursor.prototype),\"moveNext\",this).call(this);}return false;}}]);return LimitCursor;}(DecorativeCursor);},{\"./decorative-cursor\":869}],875:[function(require,module,exports){/**\n * @fileoverview Define the cursor which iterates tokens only, with inflated range.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nfunction _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var ForwardTokenCursor=require(\"./forward-token-cursor\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The cursor which iterates tokens only, with inflated range.\n * This is for the backward compatibility of padding options.\n */module.exports=function(_ForwardTokenCursor){_inherits(PaddedTokenCursor,_ForwardTokenCursor);/**\n   * Initializes this cursor.\n   * @param {Token[]} tokens - The array of tokens.\n   * @param {Comment[]} comments - The array of comments.\n   * @param {Object} indexMap - The map from locations to indices in `tokens`.\n   * @param {number} startLoc - The start location of the iteration range.\n   * @param {number} endLoc - The end location of the iteration range.\n   * @param {number} beforeCount - The number of tokens this cursor iterates before start.\n   * @param {number} afterCount - The number of tokens this cursor iterates after end.\n   */function PaddedTokenCursor(tokens,comments,indexMap,startLoc,endLoc,beforeCount,afterCount){_classCallCheck(this,PaddedTokenCursor);var _this=_possibleConstructorReturn(this,(PaddedTokenCursor.__proto__||(0,_getPrototypeOf2.default)(PaddedTokenCursor)).call(this,tokens,comments,indexMap,startLoc,endLoc));_this.index=Math.max(0,_this.index-beforeCount);_this.indexEnd=Math.min(tokens.length-1,_this.indexEnd+afterCount);return _this;}return PaddedTokenCursor;}(ForwardTokenCursor);},{\"./forward-token-cursor\":872}],876:[function(require,module,exports){/**\n * @fileoverview Define the cursor which ignores the first few tokens.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var _get=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=(0,_getOwnPropertyDescriptor2.default)(object,property);if(desc===undefined){var parent=(0,_getPrototypeOf2.default)(object);if(parent===null){return undefined;}else{return get(parent,property,receiver);}}else if(\"value\"in desc){return desc.value;}else{var getter=desc.get;if(getter===undefined){return undefined;}return getter.call(receiver);}};function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var DecorativeCursor=require(\"./decorative-cursor\");//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * The decorative cursor which ignores the first few tokens.\n */module.exports=function(_DecorativeCursor){_inherits(SkipCursor,_DecorativeCursor);/**\n     * Initializes this cursor.\n     * @param {Cursor} cursor - The cursor to be decorated.\n     * @param {number} count - The count of tokens this cursor skips.\n     */function SkipCursor(cursor,count){_classCallCheck(this,SkipCursor);var _this=_possibleConstructorReturn(this,(SkipCursor.__proto__||(0,_getPrototypeOf2.default)(SkipCursor)).call(this,cursor));_this.count=count;return _this;}/** @inheritdoc */_createClass(SkipCursor,[{key:\"moveNext\",value:function moveNext(){while(this.count>0){this.count-=1;if(!_get(SkipCursor.prototype.__proto__||(0,_getPrototypeOf2.default)(SkipCursor.prototype),\"moveNext\",this).call(this)){return false;}}return _get(SkipCursor.prototype.__proto__||(0,_getPrototypeOf2.default)(SkipCursor.prototype),\"moveNext\",this).call(this);}}]);return SkipCursor;}(DecorativeCursor);},{\"./decorative-cursor\":869}],877:[function(require,module,exports){/**\n * @fileoverview Define utilify functions for token store.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar lodash=require(\"lodash\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Gets `token.range[0]` from the given token.\n *\n * @param {Node|Token|Comment} token - The token to get.\n * @returns {number} The start location.\n * @private\n */function getStartLocation(token){return token.range[0];}//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n/**\n * Binary-searches the index of the first token which is after the given location.\n * If it was not found, this returns `tokens.length`.\n *\n * @param {(Token|Comment)[]} tokens - It searches the token in this list.\n * @param {number} location - The location to search.\n * @returns {number} The found index or `tokens.length`.\n */exports.search=function search(tokens,location){return lodash.sortedIndexBy(tokens,{range:[location]},getStartLocation);};/**\n * Gets the index of the `startLoc` in `tokens`.\n * `startLoc` can be the value of `node.range[1]`, so this checks about `startLoc - 1` as well.\n *\n * @param {(Token|Comment)[]} tokens - The tokens to find an index.\n * @param {Object} indexMap - The map from locations to indices.\n * @param {number} startLoc - The location to get an index.\n * @returns {number} The index.\n */exports.getFirstIndex=function getFirstIndex(tokens,indexMap,startLoc){if(startLoc in indexMap){return indexMap[startLoc];}if(startLoc-1 in indexMap){var index=indexMap[startLoc-1];var token=index>=0&&index<tokens.length?tokens[index]:null;// For the map of \"comment's location -> token's index\", it points the next token of a comment.\n// In that case, +1 is unnecessary.\nif(token&&token.range[0]>=startLoc){return index;}return index+1;}return 0;};/**\n * Gets the index of the `endLoc` in `tokens`.\n * The information of end locations are recorded at `endLoc - 1` in `indexMap`, so this checks about `endLoc - 1` as well.\n *\n * @param {(Token|Comment)[]} tokens - The tokens to find an index.\n * @param {Object} indexMap - The map from locations to indices.\n * @param {number} endLoc - The location to get an index.\n * @returns {number} The index.\n */exports.getLastIndex=function getLastIndex(tokens,indexMap,endLoc){if(endLoc in indexMap){return indexMap[endLoc]-1;}if(endLoc-1 in indexMap){var index=indexMap[endLoc-1];var token=index>=0&&index<tokens.length?tokens[index]:null;// For the map of \"comment's location -> token's index\", it points the next token of a comment.\n// In that case, -1 is necessary.\nif(token&&token.range[1]>endLoc){return index-1;}return index;}return tokens.length-1;};},{\"lodash\":566}],878:[function(require,module,exports){/**\n * @fileoverview The event generator for comments.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Check collection of comments to prevent double event for comment as\n * leading and trailing, then emit event if passing\n * @param {ASTNode[]} comments - Collection of comment nodes\n * @param {EventEmitter} emitter - The event emitter which is the destination of events.\n * @param {Object[]} locs - List of locations of previous comment nodes\n * @param {string} eventName - Event name postfix\n * @returns {void}\n */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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function emitComments(comments,emitter,locs,eventName){if(comments.length>0){comments.forEach(function(node){var index=locs.indexOf(node.loc);if(index>=0){locs.splice(index,1);}else{locs.push(node.loc);emitter.emit(node.type+eventName,node);}});}}/**\n * Shortcut to check and emit enter of comment nodes\n * @param {CommentEventGenerator} generator - A generator to emit.\n * @param {ASTNode[]} comments - Collection of comment nodes\n * @returns {void}\n */function emitCommentsEnter(generator,comments){emitComments(comments,generator.emitter,generator.commentLocsEnter,\"Comment\");}/**\n * Shortcut to check and emit exit of comment nodes\n * @param {CommentEventGenerator} generator - A generator to emit.\n * @param {ASTNode[]} comments Collection of comment nodes\n * @returns {void}\n */function emitCommentsExit(generator,comments){emitComments(comments,generator.emitter,generator.commentLocsExit,\"Comment:exit\");}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * The event generator for comments.\n * This is the decorator pattern.\n * This generates events of comments before/after events which are generated the original generator.\n *\n * Comment event generator class\n */var CommentEventGenerator=function(){/**\n     * @param {EventGenerator} originalEventGenerator - An event generator which is the decoration target.\n     * @param {SourceCode} sourceCode - A source code which has comments.\n     */function CommentEventGenerator(originalEventGenerator,sourceCode){_classCallCheck(this,CommentEventGenerator);this.original=originalEventGenerator;this.emitter=originalEventGenerator.emitter;this.sourceCode=sourceCode;this.commentLocsEnter=[];this.commentLocsExit=[];}/**\n     * Emits an event of entering comments.\n     * @param {ASTNode} node - A node which was entered.\n     * @returns {void}\n     */_createClass(CommentEventGenerator,[{key:\"enterNode\",value:function enterNode(node){var comments=this.sourceCode.getComments(node);emitCommentsEnter(this,comments.leading);this.original.enterNode(node);emitCommentsEnter(this,comments.trailing);}/**\n         * Emits an event of leaving comments.\n         * @param {ASTNode} node - A node which was left.\n         * @returns {void}\n         */},{key:\"leaveNode\",value:function leaveNode(node){var comments=this.sourceCode.getComments(node);emitCommentsExit(this,comments.trailing);this.original.leaveNode(node);emitCommentsExit(this,comments.leading);}}]);return CommentEventGenerator;}();module.exports=CommentEventGenerator;},{}],879:[function(require,module,exports){/**\n * @fileoverview Helper class to aid in constructing fix commands.\n * @author Alan Pierce\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var astUtils=require(\"../ast-utils\");//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * A helper class to combine fix options into a fix command. Currently, it\n * exposes some \"retain\" methods that extend the range of the text being\n * replaced so that other fixes won't touch that region in the same pass.\n */var FixTracker=function(){/**\n     * Create a new FixTracker.\n     *\n     * @param {ruleFixer} fixer A ruleFixer instance.\n     * @param {SourceCode} sourceCode A SourceCode object for the current code.\n     */function FixTracker(fixer,sourceCode){_classCallCheck(this,FixTracker);this.fixer=fixer;this.sourceCode=sourceCode;this.retainedRange=null;}/**\n     * Mark the given range as \"retained\", meaning that other fixes may not\n     * may not modify this region in the same pass.\n     *\n     * @param {int[]} range The range to retain.\n     * @returns {FixTracker} The same RuleFixer, for chained calls.\n     */_createClass(FixTracker,[{key:\"retainRange\",value:function retainRange(range){this.retainedRange=range;return this;}/**\n         * Given a node, find the function containing it (or the entire program) and\n         * mark it as retained, meaning that other fixes may not modify it in this\n         * pass. This is useful for avoiding conflicts in fixes that modify control\n         * flow.\n         *\n         * @param {ASTNode} node The node to use as a starting point.\n         * @returns {FixTracker} The same RuleFixer, for chained calls.\n         */},{key:\"retainEnclosingFunction\",value:function retainEnclosingFunction(node){var functionNode=astUtils.getUpperFunction(node);return this.retainRange(functionNode?functionNode.range:this.sourceCode.ast.range);}/**\n         * Given a node or token, find the token before and afterward, and mark that\n         * range as retained, meaning that other fixes may not modify it in this\n         * pass. This is useful for avoiding conflicts in fixes that make a small\n         * change to the code where the AST should not be changed.\n         *\n         * @param {ASTNode|Token} nodeOrToken The node or token to use as a starting\n         *      point. The token to the left and right are use in the range.\n         * @returns {FixTracker} The same RuleFixer, for chained calls.\n         */},{key:\"retainSurroundingTokens\",value:function retainSurroundingTokens(nodeOrToken){var tokenBefore=this.sourceCode.getTokenBefore(nodeOrToken)||nodeOrToken;var tokenAfter=this.sourceCode.getTokenAfter(nodeOrToken)||nodeOrToken;return this.retainRange([tokenBefore.range[0],tokenAfter.range[1]]);}/**\n         * Create a fix command that replaces the given range with the given text,\n         * accounting for any retained ranges.\n         *\n         * @param {int[]} range The range to remove in the fix.\n         * @param {string} text The text to insert in place of the range.\n         * @returns {Object} The fix command.\n         */},{key:\"replaceTextRange\",value:function replaceTextRange(range,text){var actualRange=void 0;if(this.retainedRange){actualRange=[Math.min(this.retainedRange[0],range[0]),Math.max(this.retainedRange[1],range[1])];}else{actualRange=range;}return this.fixer.replaceTextRange(actualRange,this.sourceCode.text.slice(actualRange[0],range[0])+text+this.sourceCode.text.slice(range[1],actualRange[1]));}/**\n         * Create a fix command that removes the given node or token, accounting for\n         * any retained ranges.\n         *\n         * @param {ASTNode|Token} nodeOrToken The node or token to remove.\n         * @returns {Object} The fix command.\n         */},{key:\"remove\",value:function remove(nodeOrToken){return this.replaceTextRange(nodeOrToken.range,\"\");}}]);return FixTracker;}();module.exports=FixTracker;},{\"../ast-utils\":605}],880:[function(require,module,exports){/**\n * @fileoverview A shared list of ES3 keywords.\n * @author Josh Perez\n */\"use strict\";module.exports=[\"abstract\",\"boolean\",\"break\",\"byte\",\"case\",\"catch\",\"char\",\"class\",\"const\",\"continue\",\"debugger\",\"default\",\"delete\",\"do\",\"double\",\"else\",\"enum\",\"export\",\"extends\",\"false\",\"final\",\"finally\",\"float\",\"for\",\"function\",\"goto\",\"if\",\"implements\",\"import\",\"in\",\"instanceof\",\"int\",\"interface\",\"long\",\"native\",\"new\",\"null\",\"package\",\"private\",\"protected\",\"public\",\"return\",\"short\",\"static\",\"super\",\"switch\",\"synchronized\",\"this\",\"throw\",\"throws\",\"transient\",\"true\",\"try\",\"typeof\",\"var\",\"void\",\"volatile\",\"while\",\"with\"];},{}],881:[function(require,module,exports){/**\n * @fileoverview The event generator for AST nodes.\n * @author Toru Nagashima\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var esquery=require(\"esquery\");var lodash=require(\"lodash\");//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n/**\n * An object describing an AST selector\n * @typedef {Object} ASTSelector\n * @property {string} rawSelector The string that was parsed into this selector\n * @property {boolean} isExit `true` if this should be emitted when exiting the node rather than when entering\n * @property {Object} parsedSelector An object (from esquery) describing the matching behavior of the selector\n * @property {string[]|null} listenerTypes A list of node types that could possibly cause the selector to match,\n * or `null` if all node types could cause a match\n * @property {number} attributeCount The total number of classes, pseudo-classes, and attribute queries in this selector\n * @property {number} identifierCount The total number of identifier queries in this selector\n *///------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n* Gets the possible types of a selector\n* @param {Object} parsedSelector An object (from esquery) describing the matching behavior of the selector\n* @returns {string[]|null} The node types that could possibly trigger this selector, or `null` if all node types could trigger it\n*/function getPossibleTypes(parsedSelector){switch(parsedSelector.type){case\"identifier\":return[parsedSelector.value];case\"matches\":{var typesForComponents=parsedSelector.selectors.map(getPossibleTypes);if(typesForComponents.every(function(typesForComponent){return typesForComponent;})){return lodash.union.apply(null,typesForComponents);}return null;}case\"compound\":{var _typesForComponents=parsedSelector.selectors.map(getPossibleTypes).filter(function(typesForComponent){return typesForComponent;});// If all of the components could match any type, then the compound could also match any type.\nif(!_typesForComponents.length){return null;}/*\n                 * If at least one of the components could only match a particular type, the compound could only match\n                 * the intersection of those types.\n                 */return lodash.intersection.apply(null,_typesForComponents);}case\"child\":case\"descendant\":case\"sibling\":case\"adjacent\":return getPossibleTypes(parsedSelector.right);default:return null;}}/**\n * Counts the number of class, pseudo-class, and attribute queries in this selector\n * @param {Object} parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns {number} The number of class, pseudo-class, and attribute queries in this selector\n */function countClassAttributes(parsedSelector){switch(parsedSelector.type){case\"child\":case\"descendant\":case\"sibling\":case\"adjacent\":return countClassAttributes(parsedSelector.left)+countClassAttributes(parsedSelector.right);case\"compound\":case\"not\":case\"matches\":return parsedSelector.selectors.reduce(function(sum,childSelector){return sum+countClassAttributes(childSelector);},0);case\"attribute\":case\"field\":case\"nth-child\":case\"nth-last-child\":return 1;default:return 0;}}/**\n * Counts the number of identifier queries in this selector\n * @param {Object} parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns {number} The number of identifier queries\n */function countIdentifiers(parsedSelector){switch(parsedSelector.type){case\"child\":case\"descendant\":case\"sibling\":case\"adjacent\":return countIdentifiers(parsedSelector.left)+countIdentifiers(parsedSelector.right);case\"compound\":case\"not\":case\"matches\":return parsedSelector.selectors.reduce(function(sum,childSelector){return sum+countIdentifiers(childSelector);},0);case\"identifier\":return 1;default:return 0;}}/**\n * Compares the specificity of two selector objects, with CSS-like rules.\n * @param {ASTSelector} selectorA An AST selector descriptor\n * @param {ASTSelector} selectorB Another AST selector descriptor\n * @returns {number}\n * a value less than 0 if selectorA is less specific than selectorB\n * a value greater than 0 if selectorA is more specific than selectorB\n * a value less than 0 if selectorA and selectorB have the same specificity, and selectorA <= selectorB alphabetically\n * a value greater than 0 if selectorA and selectorB have the same specificity, and selectorA > selectorB alphabetically\n */function compareSpecificity(selectorA,selectorB){return selectorA.attributeCount-selectorB.attributeCount||selectorA.identifierCount-selectorB.identifierCount||(selectorA.rawSelector<=selectorB.rawSelector?-1:1);}/**\n * Parses a raw selector string, and throws a useful error if parsing fails.\n * @param {string} rawSelector A raw AST selector\n * @returns {Object} An object (from esquery) describing the matching behavior of this selector\n * @throws {Error} An error if the selector is invalid\n */function tryParseSelector(rawSelector){try{return esquery.parse(rawSelector.replace(/:exit$/,\"\"));}catch(err){if(typeof err.offset===\"number\"){throw new Error(\"Syntax error in selector \\\"\"+rawSelector+\"\\\" at position \"+err.offset+\": \"+err.message);}throw err;}}/**\n * Parses a raw selector string, and returns the parsed selector along with specificity and type information.\n * @param {string} rawSelector A raw AST selector\n * @returns {ASTSelector} A selector descriptor\n */var parseSelector=lodash.memoize(function(rawSelector){var parsedSelector=tryParseSelector(rawSelector);return{rawSelector:rawSelector,isExit:rawSelector.endsWith(\":exit\"),parsedSelector:parsedSelector,listenerTypes:getPossibleTypes(parsedSelector),attributeCount:countClassAttributes(parsedSelector),identifierCount:countIdentifiers(parsedSelector)};});//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * The event generator for AST nodes.\n * This implements below interface.\n *\n * ```ts\n * interface EventGenerator {\n *     emitter: EventEmitter;\n *     enterNode(node: ASTNode): void;\n *     leaveNode(node: ASTNode): void;\n * }\n * ```\n */var NodeEventGenerator=function(){/**\n    * @param {EventEmitter} emitter - An event emitter which is the destination of events. This emitter must already\n    * have registered listeners for all of the events that it needs to listen for.\n    * @returns {NodeEventGenerator} new instance\n    */function NodeEventGenerator(emitter){var _this=this;_classCallCheck(this,NodeEventGenerator);this.emitter=emitter;this.currentAncestry=[];this.enterSelectorsByNodeType=new _map4.default();this.exitSelectorsByNodeType=new _map4.default();this.anyTypeEnterSelectors=[];this.anyTypeExitSelectors=[];var eventNames=typeof emitter.eventNames===\"function\"// Use the built-in eventNames() function if available (Node 6+)\n?emitter.eventNames()/*\n         * Otherwise, use the private _events property.\n         * Using a private property isn't ideal here, but this seems to\n         * be the best way to get a list of event names without overriding\n         * addEventListener, which would hurt performance. This property\n         * is widely used and unlikely to be removed in a future version\n         * (see https://github.com/nodejs/node/issues/1817). Also, future\n         * node versions will have eventNames() anyway.\n         */:(0,_keys4.default)(emitter._events);// eslint-disable-line no-underscore-dangle\neventNames.forEach(function(rawSelector){var selector=parseSelector(rawSelector);if(selector.listenerTypes){selector.listenerTypes.forEach(function(nodeType){var typeMap=selector.isExit?_this.exitSelectorsByNodeType:_this.enterSelectorsByNodeType;if(!typeMap.has(nodeType)){typeMap.set(nodeType,[]);}typeMap.get(nodeType).push(selector);});}else{(selector.isExit?_this.anyTypeExitSelectors:_this.anyTypeEnterSelectors).push(selector);}});this.anyTypeEnterSelectors.sort(compareSpecificity);this.anyTypeExitSelectors.sort(compareSpecificity);this.enterSelectorsByNodeType.forEach(function(selectorList){return selectorList.sort(compareSpecificity);});this.exitSelectorsByNodeType.forEach(function(selectorList){return selectorList.sort(compareSpecificity);});}/**\n     * Checks a selector against a node, and emits it if it matches\n     * @param {ASTNode} node The node to check\n     * @param {ASTSelector} selector An AST selector descriptor\n     * @returns {void}\n     */_createClass(NodeEventGenerator,[{key:\"applySelector\",value:function applySelector(node,selector){if(esquery.matches(node,selector.parsedSelector,this.currentAncestry)){this.emitter.emit(selector.rawSelector,node);}}/**\n         * Applies all appropriate selectors to a node, in specificity order\n         * @param {ASTNode} node The node to check\n         * @param {boolean} isExit `false` if the node is currently being entered, `true` if it's currently being exited\n         * @returns {void}\n         */},{key:\"applySelectors\",value:function applySelectors(node,isExit){var selectorsByNodeType=(isExit?this.exitSelectorsByNodeType:this.enterSelectorsByNodeType).get(node.type)||[];var anyTypeSelectors=isExit?this.anyTypeExitSelectors:this.anyTypeEnterSelectors;/*\n             * selectorsByNodeType and anyTypeSelectors were already sorted by specificity in the constructor.\n             * Iterate through each of them, applying selectors in the right order.\n             */var selectorsByTypeIndex=0;var anyTypeSelectorsIndex=0;while(selectorsByTypeIndex<selectorsByNodeType.length||anyTypeSelectorsIndex<anyTypeSelectors.length){if(selectorsByTypeIndex>=selectorsByNodeType.length||anyTypeSelectorsIndex<anyTypeSelectors.length&&compareSpecificity(anyTypeSelectors[anyTypeSelectorsIndex],selectorsByNodeType[selectorsByTypeIndex])<0){this.applySelector(node,anyTypeSelectors[anyTypeSelectorsIndex++]);}else{this.applySelector(node,selectorsByNodeType[selectorsByTypeIndex++]);}}}/**\n         * Emits an event of entering AST node.\n         * @param {ASTNode} node - A node which was entered.\n         * @returns {void}\n         */},{key:\"enterNode\",value:function enterNode(node){if(node.parent){this.currentAncestry.unshift(node.parent);}this.applySelectors(node,false);}/**\n         * Emits an event of leaving AST node.\n         * @param {ASTNode} node - A node which was left.\n         * @returns {void}\n         */},{key:\"leaveNode\",value:function leaveNode(node){this.applySelectors(node,true);this.currentAncestry.shift();}}]);return NodeEventGenerator;}();module.exports=NodeEventGenerator;},{\"esquery\":354,\"lodash\":566}],882:[function(require,module,exports){/**\n * @fileoverview Pattern for detecting any letter (even letters outside of ASCII).\n * NOTE: This file was generated using this script in JSCS based on the Unicode 7.0.0 standard: https://github.com/jscs-dev/node-jscs/blob/f5ed14427deb7e7aac84f3056a5aab2d9f3e563e/publish/helpers/generate-patterns.js\n * Do not edit this file by hand-- please use https://github.com/mathiasbynens/regenerate to regenerate the regular expression exported from this file.\n * @author Kevin Partington\n * @license MIT License (from JSCS). See below.\n *//*\n * The MIT License (MIT)\n *\n * Copyright 2013-2016 Dulin Marat and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a 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\n * permit persons to whom the Software is furnished to do so, subject to\n * 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 BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\"use strict\";module.exports=/[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\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-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\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-\\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\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\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-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\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]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/;},{}],883:[function(require,module,exports){/**\n * @fileoverview An object that creates fix commands for rules.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n// none!\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n/**\n * Creates a fix command that inserts text at the specified index in the source text.\n * @param {int} index The 0-based index at which to insert the new text.\n * @param {string} text The text to insert.\n * @returns {Object} The fix command.\n * @private\n */function insertTextAt(index,text){return{range:[index,index],text:text};}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * Creates code fixing commands for rules.\n */var ruleFixer=(0,_freeze2.default)({/**\n     * Creates a fix command that inserts text after the given node or token.\n     * The fix is not applied until applyFixes() is called.\n     * @param {ASTNode|Token} nodeOrToken The node or token to insert after.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */insertTextAfter:function insertTextAfter(nodeOrToken,text){return this.insertTextAfterRange(nodeOrToken.range,text);},/**\n     * Creates a fix command that inserts text after the specified range in the source text.\n     * The fix is not applied until applyFixes() is called.\n     * @param {int[]} range The range to replace, first item is start of range, second\n     *      is end of range.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */insertTextAfterRange:function insertTextAfterRange(range,text){return insertTextAt(range[1],text);},/**\n     * Creates a fix command that inserts text before the given node or token.\n     * The fix is not applied until applyFixes() is called.\n     * @param {ASTNode|Token} nodeOrToken The node or token to insert before.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */insertTextBefore:function insertTextBefore(nodeOrToken,text){return this.insertTextBeforeRange(nodeOrToken.range,text);},/**\n     * Creates a fix command that inserts text before the specified range in the source text.\n     * The fix is not applied until applyFixes() is called.\n     * @param {int[]} range The range to replace, first item is start of range, second\n     *      is end of range.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */insertTextBeforeRange:function insertTextBeforeRange(range,text){return insertTextAt(range[0],text);},/**\n     * Creates a fix command that replaces text at the node or token.\n     * The fix is not applied until applyFixes() is called.\n     * @param {ASTNode|Token} nodeOrToken The node or token to remove.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */replaceText:function replaceText(nodeOrToken,text){return this.replaceTextRange(nodeOrToken.range,text);},/**\n     * Creates a fix command that replaces text at the specified range in the source text.\n     * The fix is not applied until applyFixes() is called.\n     * @param {int[]} range The range to replace, first item is start of range, second\n     *      is end of range.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */replaceTextRange:function replaceTextRange(range,text){return{range:range,text:text};},/**\n     * Creates a fix command that removes the node or token from the source.\n     * The fix is not applied until applyFixes() is called.\n     * @param {ASTNode|Token} nodeOrToken The node or token to remove.\n     * @returns {Object} The fix command.\n     */remove:function remove(nodeOrToken){return this.removeRange(nodeOrToken.range);},/**\n     * Creates a fix command that removes the specified range of text from the source.\n     * The fix is not applied until applyFixes() is called.\n     * @param {int[]} range The range to remove, first item is start of range, second\n     *      is end of range.\n     * @returns {Object} The fix command.\n     */removeRange:function removeRange(range){return{range:range,text:\"\"};}});module.exports=ruleFixer;},{}],884:[function(require,module,exports){/**\n * @fileoverview Abstraction of JavaScript source code.\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nvar _typeof=typeof _symbol4.default===\"function\"&&(0,_typeof6.default)(_iterator22.default)===\"symbol\"?function(obj){return typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);}:function(obj){return obj&&typeof _symbol4.default===\"function\"&&obj.constructor===_symbol4.default&&obj!==_symbol4.default.prototype?\"symbol\":typeof obj===\"undefined\"?\"undefined\":(0,_typeof6.default)(obj);};var TokenStore=require(\"../token-store\"),Traverser=require(\"./traverser\"),astUtils=require(\"../ast-utils\"),lodash=require(\"lodash\");//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n/**\n * Validates that the given AST has the required information.\n * @param {ASTNode} ast The Program node of the AST to check.\n * @throws {Error} If the AST doesn't contain the correct information.\n * @returns {void}\n * @private\n */function validate(ast){if(!ast.tokens){throw new Error(\"AST is missing the tokens array.\");}if(!ast.comments){throw new Error(\"AST is missing the comments array.\");}if(!ast.loc){throw new Error(\"AST is missing location information.\");}if(!ast.range){throw new Error(\"AST is missing range information\");}}/**\n * Finds a JSDoc comment node in an array of comment nodes.\n * @param {ASTNode[]} comments The array of comment nodes to search.\n * @param {int} line Line number to look around\n * @returns {ASTNode} The node if found, null if not.\n * @private\n */function findJSDocComment(comments,line){if(comments){for(var i=comments.length-1;i>=0;i--){if(comments[i].type===\"Block\"&&comments[i].value.charAt(0)===\"*\"){if(line-comments[i].loc.end.line<=1){return comments[i];}break;}}}return null;}/**\n * Check to see if its a ES6 export declaration\n * @param {ASTNode} astNode - any node\n * @returns {boolean} whether the given node represents a export declaration\n * @private\n */function looksLikeExport(astNode){return astNode.type===\"ExportDefaultDeclaration\"||astNode.type===\"ExportNamedDeclaration\"||astNode.type===\"ExportAllDeclaration\"||astNode.type===\"ExportSpecifier\";}/**\n * Merges two sorted lists into a larger sorted list in O(n) time\n * @param {Token[]} tokens The list of tokens\n * @param {Token[]} comments The list of comments\n * @returns {Token[]} A sorted list of tokens and comments\n */function sortedMerge(tokens,comments){var result=[];var tokenIndex=0;var commentIndex=0;while(tokenIndex<tokens.length||commentIndex<comments.length){if(commentIndex>=comments.length||tokenIndex<tokens.length&&tokens[tokenIndex].range[0]<comments[commentIndex].range[0]){result.push(tokens[tokenIndex++]);}else{result.push(comments[commentIndex++]);}}return result;}//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n/**\n * Represents parsed source code.\n * @param {string} text - The source code text.\n * @param {ASTNode} ast - The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped.\n * @constructor\n */function SourceCode(text,ast){validate(ast);/**\n     * The flag to indicate that the source code has Unicode BOM.\n     * @type boolean\n     */this.hasBOM=text.charCodeAt(0)===0xFEFF;/**\n     * The original text source code.\n     * BOM was stripped from this text.\n     * @type string\n     */this.text=this.hasBOM?text.slice(1):text;/**\n     * The parsed AST for the source code.\n     * @type ASTNode\n     */this.ast=ast;/**\n     * The source code split into lines according to ECMA-262 specification.\n     * This is done to avoid each rule needing to do so separately.\n     * @type string[]\n     */this.lines=[];this.lineStartIndices=[0];var lineEndingPattern=astUtils.createGlobalLinebreakMatcher();var match=void 0;/*\n     * Previously, this was implemented using a regex that\n     * matched a sequence of non-linebreak characters followed by a\n     * linebreak, then adding the lengths of the matches. However,\n     * this caused a catastrophic backtracking issue when the end\n     * of a file contained a large number of non-newline characters.\n     * To avoid this, the current implementation just matches newlines\n     * and uses match.index to get the correct line start indices.\n     */while(match=lineEndingPattern.exec(this.text)){this.lines.push(this.text.slice(this.lineStartIndices[this.lineStartIndices.length-1],match.index));this.lineStartIndices.push(match.index+match[0].length);}this.lines.push(this.text.slice(this.lineStartIndices[this.lineStartIndices.length-1]));this.tokensAndComments=sortedMerge(ast.tokens,ast.comments);// create token store methods\nvar tokenStore=new TokenStore(ast.tokens,ast.comments);var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=(0,_getIterator5.default)(TokenStore.PUBLIC_METHODS),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var methodName=_step.value;this[methodName]=tokenStore[methodName].bind(tokenStore);}// don't allow modification of this object\n}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}(0,_freeze2.default)(this);(0,_freeze2.default)(this.lines);}/**\n * Split the source code into multiple lines based on the line delimiters\n * @param {string} text Source code as a string\n * @returns {string[]} Array of source code lines\n * @public\n */SourceCode.splitLines=function(text){return text.split(astUtils.createGlobalLinebreakMatcher());};SourceCode.prototype={constructor:SourceCode,/**\n     * Gets the source code for the given node.\n     * @param {ASTNode=} node The AST node to get the text for.\n     * @param {int=} beforeCount The number of characters before the node to retrieve.\n     * @param {int=} afterCount The number of characters after the node to retrieve.\n     * @returns {string} The text representing the AST node.\n     */getText:function getText(node,beforeCount,afterCount){if(node){return this.text.slice(Math.max(node.range[0]-(beforeCount||0),0),node.range[1]+(afterCount||0));}return this.text;},/**\n     * Gets the entire source text split into an array of lines.\n     * @returns {Array} The source text as an array of lines.\n     */getLines:function getLines(){return this.lines;},/**\n     * Retrieves an array containing all comments in the source code.\n     * @returns {ASTNode[]} An array of comment nodes.\n     */getAllComments:function getAllComments(){return this.ast.comments;},/**\n     * Gets all comments for the given node.\n     * @param {ASTNode} node The AST node to get the comments for.\n     * @returns {Object} The list of comments indexed by their position.\n     * @public\n     */getComments:function getComments(node){var leadingComments=node.leadingComments||[];var trailingComments=node.trailingComments||[];/*\n         * espree adds a \"comments\" array on Program nodes rather than\n         * leadingComments/trailingComments. Comments are only left in the\n         * Program node comments array if there is no executable code.\n         */if(node.type===\"Program\"){if(node.body.length===0){leadingComments=node.comments;}}return{leading:leadingComments,trailing:trailingComments};},/**\n     * Retrieves the JSDoc comment for a given node.\n     * @param {ASTNode} node The AST node to get the comment for.\n     * @returns {ASTNode} The BlockComment node containing the JSDoc for the\n     *      given node or null if not found.\n     * @public\n     */getJSDocComment:function getJSDocComment(node){var parent=node.parent;switch(node.type){case\"ClassDeclaration\":case\"FunctionDeclaration\":if(looksLikeExport(parent)){return findJSDocComment(parent.leadingComments,parent.loc.start.line);}return findJSDocComment(node.leadingComments,node.loc.start.line);case\"ClassExpression\":return findJSDocComment(parent.parent.leadingComments,parent.parent.loc.start.line);case\"ArrowFunctionExpression\":case\"FunctionExpression\":if(parent.type!==\"CallExpression\"&&parent.type!==\"NewExpression\"){while(parent&&!parent.leadingComments&&!/Function/.test(parent.type)&&parent.type!==\"MethodDefinition\"&&parent.type!==\"Property\"){parent=parent.parent;}return parent&&parent.type!==\"FunctionDeclaration\"?findJSDocComment(parent.leadingComments,parent.loc.start.line):null;}else if(node.leadingComments){return findJSDocComment(node.leadingComments,node.loc.start.line);}// falls through\ndefault:return null;}},/**\n     * Gets the deepest node containing a range index.\n     * @param {int} index Range index of the desired node.\n     * @returns {ASTNode} The node if found or null if not found.\n     */getNodeByRangeIndex:function getNodeByRangeIndex(index){var result=null,resultParent=null;var traverser=new Traverser();traverser.traverse(this.ast,{enter:function enter(node,parent){if(node.range[0]<=index&&index<node.range[1]){result=node;resultParent=parent;}else{this.skip();}},leave:function leave(node){if(node===result){this.break();}}});return result?(0,_assign4.default)({parent:resultParent},result):null;},/**\n     * Determines if two tokens have at least one whitespace character\n     * between them. This completely disregards comments in making the\n     * determination, so comments count as zero-length substrings.\n     * @param {Token} first The token to check after.\n     * @param {Token} second The token to check before.\n     * @returns {boolean} True if there is only space between tokens, false\n     *  if there is anything other than whitespace between tokens.\n     */isSpaceBetweenTokens:function isSpaceBetweenTokens(first,second){var text=this.text.slice(first.range[1],second.range[0]);return /\\s/.test(text.replace(/\\/\\*.*?\\*\\//g,\"\"));},/**\n    * Converts a source text index into a (line, column) pair.\n    * @param {number} index The index of a character in a file\n    * @returns {Object} A {line, column} location object with a 0-indexed column\n    */getLocFromIndex:function getLocFromIndex(index){if(typeof index!==\"number\"){throw new TypeError(\"Expected `index` to be a number.\");}if(index<0||index>this.text.length){throw new RangeError(\"Index out of range (requested index \"+index+\", but source text has length \"+this.text.length+\").\");}/*\n         * For an argument of this.text.length, return the location one \"spot\" past the last character\n         * of the file. If the last character is a linebreak, the location will be column 0 of the next\n         * line; otherwise, the location will be in the next column on the same line.\n         *\n         * See getIndexFromLoc for the motivation for this special case.\n         */if(index===this.text.length){return{line:this.lines.length,column:this.lines[this.lines.length-1].length};}/*\n         * To figure out which line rangeIndex is on, determine the last index at which rangeIndex could\n         * be inserted into lineIndices to keep the list sorted.\n         */var lineNumber=lodash.sortedLastIndex(this.lineStartIndices,index);return{line:lineNumber,column:index-this.lineStartIndices[lineNumber-1]};},/**\n    * Converts a (line, column) pair into a range index.\n    * @param {Object} loc A line/column location\n    * @param {number} loc.line The line number of the location (1-indexed)\n    * @param {number} loc.column The column number of the location (0-indexed)\n    * @returns {number} The range index of the location in the file.\n    */getIndexFromLoc:function getIndexFromLoc(loc){if((typeof loc===\"undefined\"?\"undefined\":_typeof(loc))!==\"object\"||typeof loc.line!==\"number\"||typeof loc.column!==\"number\"){throw new TypeError(\"Expected `loc` to be an object with numeric `line` and `column` properties.\");}if(loc.line<=0){throw new RangeError(\"Line number out of range (line \"+loc.line+\" requested). Line numbers should be 1-based.\");}if(loc.line>this.lineStartIndices.length){throw new RangeError(\"Line number out of range (line \"+loc.line+\" requested, but only \"+this.lineStartIndices.length+\" lines present).\");}var lineStartIndex=this.lineStartIndices[loc.line-1];var lineEndIndex=loc.line===this.lineStartIndices.length?this.text.length:this.lineStartIndices[loc.line];var positionIndex=lineStartIndex+loc.column;/*\n         * By design, getIndexFromLoc({ line: lineNum, column: 0 }) should return the start index of\n         * the given line, provided that the line number is valid element of this.lines. Since the\n         * last element of this.lines is an empty string for files with trailing newlines, add a\n         * special case where getting the index for the first location after the end of the file\n         * will return the length of the file, rather than throwing an error. This allows rules to\n         * use getIndexFromLoc consistently without worrying about edge cases at the end of a file.\n         */if(loc.line===this.lineStartIndices.length&&positionIndex>lineEndIndex||loc.line<this.lineStartIndices.length&&positionIndex>=lineEndIndex){throw new RangeError(\"Column number out of range (column \"+loc.column+\" requested, but the length of line \"+loc.line+\" is \"+(lineEndIndex-lineStartIndex)+\").\");}return positionIndex;}};module.exports=SourceCode;},{\"../ast-utils\":605,\"../token-store\":873,\"./traverser\":885,\"lodash\":566}],885:[function(require,module,exports){/**\n * @fileoverview Wrapper around estraverse\n * @author Nicholas C. Zakas\n */\"use strict\";//------------------------------------------------------------------------------\n// Requirements\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;(0,_defineProperty3.default)(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var _get=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=(0,_getOwnPropertyDescriptor2.default)(object,property);if(desc===undefined){var parent=(0,_getPrototypeOf2.default)(object);if(parent===null){return undefined;}else{return get(parent,property,receiver);}}else if(\"value\"in desc){return desc.value;}else{var getter=desc.get;if(getter===undefined){return undefined;}return getter.call(receiver);}};function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&((typeof call===\"undefined\"?\"undefined\":(0,_typeof6.default)(call))===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+(typeof superClass===\"undefined\"?\"undefined\":(0,_typeof6.default)(superClass)));}subClass.prototype=(0,_create4.default)(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)_setPrototypeOf2.default?(0,_setPrototypeOf2.default)(subClass,superClass):subClass.__proto__=superClass;}var estraverse=require(\"estraverse\");//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nvar KEY_BLACKLIST=new _set3.default([\"parent\",\"leadingComments\",\"trailingComments\"]);/**\n * Wrapper around an estraverse controller that ensures the correct keys\n * are visited.\n * @constructor\n */var Traverser=function(_estraverse$Controlle){_inherits(Traverser,_estraverse$Controlle);function Traverser(){_classCallCheck(this,Traverser);return _possibleConstructorReturn(this,(Traverser.__proto__||(0,_getPrototypeOf2.default)(Traverser)).apply(this,arguments));}_createClass(Traverser,[{key:\"traverse\",value:function traverse(node,visitor){visitor.fallback=Traverser.getKeys;return _get(Traverser.prototype.__proto__||(0,_getPrototypeOf2.default)(Traverser.prototype),\"traverse\",this).call(this,node,visitor);}/**\n         * Calculates the keys to use for traversal.\n         * @param {ASTNode} node The node to read keys from.\n         * @returns {string[]} An array of keys to visit on the node.\n         * @private\n         */}],[{key:\"getKeys\",value:function getKeys(node){return(0,_keys4.default)(node).filter(function(key){return!KEY_BLACKLIST.has(key);});}}]);return Traverser;}(estraverse.Controller);module.exports=Traverser;},{\"estraverse\":360}]},{},[616])(616);});\n\n"
  },
  {
    "path": "src/workers/eslint.worker.js",
    "content": "/* @flow */\n\nimport ESLint from '../vendor/eslint.bundle';\nimport config from '../config/eslint.json';\n\nself.addEventListener('message', event => {\n  const { code, version } = event.data;\n\n  try {\n    const markers = ESLint.verify(code, config).map(err => ({\n      startLineNumber: err.line,\n      endLineNumber: err.line,\n      startColumn: err.column,\n      endColumn: err.column,\n      message: `${err.message} (${err.ruleId})`,\n      severity: 3,\n      source: 'ESLint',\n    }));\n\n    self.postMessage({ markers, version });\n  } catch (e) {\n    /* Ignore error */\n  }\n});\n"
  },
  {
    "path": "src/workers/typings.worker.js",
    "content": "/**\n * Worker to fetch typescript definitions for dependencies.\n * Credits to @CompuIves\n * https://github.com/CompuIves/codesandbox-client/blob/dcdb4169bcbe3e5aeaebae19ff1d45940c1af834/packages/app/src/app/components/CodeEditor/Monaco/workers/fetch-dependency-typings.js\n *\n * global ts\n * @flow\n */\n\nimport path from 'path';\nimport { Store, set as setItem, get as getItem } from 'idb-keyval';\n\nself.importScripts(\n  'https://cdnjs.cloudflare.com/ajax/libs/typescript/2.4.2/typescript.min.js'\n);\n\nconst ROOT_URL = `https://cdn.jsdelivr.net/`;\n\nconst store = new Store('typescript-definitions-cache-v1');\nconst fetchCache = new Map();\n\nconst doFetch = url => {\n  const cached = fetchCache.get(url);\n\n  if (cached) {\n    return cached;\n  }\n\n  const promise = fetch(url)\n    .then(response => {\n      if (response.status >= 200 && response.status < 300) {\n        return Promise.resolve(response);\n      }\n\n      const error = new Error(response.statusText || response.status);\n\n      return Promise.reject(error);\n    })\n    .then(response => response.text());\n\n  fetchCache.set(url, promise);\n\n  return promise;\n};\n\nconst fetchFromDefinitelyTyped = (dependency, version, fetchedPaths) =>\n  doFetch(\n    `${ROOT_URL}npm/@types/${dependency\n      .replace('@', '')\n      .replace(/\\//g, '__')}/index.d.ts`\n  ).then(typings => {\n    fetchedPaths[`node_modules/${dependency}/index.d.ts`] = typings;\n  });\n\nconst getRequireStatements = (title: string, code: string) => {\n  const requires = [];\n\n  const sourceFile = self.ts.createSourceFile(\n    title,\n    code,\n    self.ts.ScriptTarget.Latest,\n    true,\n    self.ts.ScriptKind.TS\n  );\n\n  self.ts.forEachChild(sourceFile, node => {\n    switch (node.kind) {\n      case self.ts.SyntaxKind.ImportDeclaration: {\n        requires.push(node.moduleSpecifier.text);\n        break;\n      }\n      case self.ts.SyntaxKind.ExportDeclaration: {\n        // For syntax 'export ... from '...'''\n        if (node.moduleSpecifier) {\n          requires.push(node.moduleSpecifier.text);\n        }\n        break;\n      }\n      default: {\n        /* */\n      }\n    }\n  });\n\n  return requires;\n};\n\nconst tempTransformFiles = files => {\n  const finalObj = {};\n\n  files.forEach(d => {\n    finalObj[d.name] = d;\n  });\n\n  return finalObj;\n};\n\nconst transformFiles = dir =>\n  dir.files\n    ? dir.files.reduce((prev, next) => {\n        if (next.type === 'file') {\n          return { ...prev, [next.path]: next };\n        }\n\n        return { ...prev, ...transformFiles(next) };\n      }, {})\n    : {};\n\nconst getFileMetaData = (dependency, version, depPath) =>\n  doFetch(\n    `https://data.jsdelivr.com/v1/package/npm/${dependency}@${version}/flat`\n  )\n    .then(response => JSON.parse(response))\n    .then(response => response.files.filter(f => f.name.startsWith(depPath)))\n    .then(tempTransformFiles);\n\nconst resolveAppropiateFile = (fileMetaData, relativePath) => {\n  const absolutePath = `/${relativePath}`;\n\n  if (fileMetaData[`${absolutePath}.d.ts`]) return `${relativePath}.d.ts`;\n  if (fileMetaData[`${absolutePath}.ts`]) return `${relativePath}.ts`;\n  if (fileMetaData[absolutePath]) return relativePath;\n  if (fileMetaData[`${absolutePath}/index.d.ts`])\n    return `${relativePath}/index.d.ts`;\n\n  return relativePath;\n};\n\nconst getFileTypes = (\n  depUrl,\n  dependency,\n  depPath,\n  fetchedPaths,\n  fileMetaData\n) => {\n  const virtualPath = path.join('node_modules', dependency, depPath);\n\n  if (fetchedPaths[virtualPath]) return null;\n\n  return doFetch(`${depUrl}/${depPath}`).then(typings => {\n    if (fetchedPaths[virtualPath]) return null;\n\n    fetchedPaths[virtualPath] = typings;\n\n    // Now find all require statements, so we can download those types too\n    return Promise.all(\n      getRequireStatements(depPath, typings)\n        .filter(\n          // Don't add global deps\n          dep => dep.startsWith('.')\n        )\n        .map(relativePath => path.join(path.dirname(depPath), relativePath))\n        .map(relativePath => resolveAppropiateFile(fileMetaData, relativePath))\n        .map(nextDepPath =>\n          getFileTypes(\n            depUrl,\n            dependency,\n            nextDepPath,\n            fetchedPaths,\n            fileMetaData\n          )\n        )\n    );\n  });\n};\n\nfunction fetchFromMeta(dependency, version, fetchedPaths) {\n  const depUrl = `https://data.jsdelivr.com/v1/package/npm/${dependency}@${version}/flat`;\n\n  return doFetch(depUrl)\n    .then(response => JSON.parse(response))\n    .then(meta => {\n      const filterAndFlatten = (files, filter) =>\n        files.reduce((paths, file) => {\n          if (filter.test(file.name)) {\n            paths.push(file.name);\n          }\n          return paths;\n        }, []);\n\n      let dtsFiles = filterAndFlatten(meta.files, /\\.d\\.ts$/);\n      if (dtsFiles.length === 0) {\n        // if no .d.ts files found, fallback to .ts files\n        dtsFiles = filterAndFlatten(meta.files, /\\.ts$/);\n      }\n\n      if (dtsFiles.length === 0) {\n        throw new Error(`No inline typings found for ${dependency}@${version}`);\n      }\n\n      dtsFiles.forEach(file => {\n        doFetch(`https://cdn.jsdelivr.net/npm/${dependency}@${version}${file}`)\n          .then(dtsFile => {\n            fetchedPaths[`node_modules/${dependency}${file}`] = dtsFile;\n          })\n          .catch(() => {});\n      });\n    });\n}\n\nfunction fetchFromTypings(dependency, version, fetchedPaths) {\n  const depUrl = `${ROOT_URL}npm/${dependency}@${version}`;\n\n  return doFetch(`${depUrl}/package.json`)\n    .then(response => JSON.parse(response))\n    .then(packageJSON => {\n      const types = packageJSON.typings || packageJSON.types;\n      if (types) {\n        // Add package.json, since this defines where all types lie\n        fetchedPaths[\n          `node_modules/${dependency}/package.json`\n        ] = JSON.stringify(packageJSON);\n\n        // get all files in the specified directory\n        return getFileMetaData(\n          dependency,\n          version,\n          path.join('/', path.dirname(types))\n        ).then(fileData =>\n          getFileTypes(\n            depUrl,\n            dependency,\n            resolveAppropiateFile(fileData, types),\n            fetchedPaths,\n            fileData\n          )\n        );\n      }\n\n      throw new Error(\n        `No typings field in package.json for ${dependency}@${version}`\n      );\n    });\n}\n\nfunction fetchDefinitions(name, version) {\n  if (!version) {\n    return Promise.reject(new Error(`No version specified for ${name}`));\n  }\n\n  // Query cache for the defintions\n  const key = `${name}@${version}`;\n\n  return getItem(key, store)\n    .catch(e => {\n      console.error('An error occurred when getting definitions from cache', e);\n    })\n    .then(result => {\n      if (result) {\n        return result;\n      }\n\n      // If result is empty, fetch from remote\n      const fetchedPaths = {};\n\n      return fetchFromTypings(name, version, fetchedPaths)\n        .catch(() =>\n          // not available in package.json, try checking meta for inline .d.ts files\n          fetchFromMeta(name, version, fetchedPaths)\n        )\n        .catch(() =>\n          // Not available in package.json or inline from meta, try checking in @types/\n          fetchFromDefinitelyTyped(name, version, fetchedPaths)\n        )\n        .then(() => {\n          if (Object.keys(fetchedPaths).length) {\n            // Also cache the definitions\n            setItem(key, fetchedPaths, store);\n\n            return fetchedPaths;\n          } else {\n            throw new Error(`Type definitions are empty for ${key}`);\n          }\n        });\n    });\n}\n\nself.addEventListener('message', event => {\n  const { name, version } = event.data;\n\n  fetchDefinitions(name, version).then(\n    result =>\n      self.postMessage({\n        name,\n        version,\n        typings: result,\n      }),\n    error => {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error(error);\n      }\n    }\n  );\n});\n"
  },
  {
    "path": "webpack.config.js",
    "content": "/* eslint-disable import/no-commonjs */\n\nconst webpack = require('webpack');\nconst path = require('path');\nconst MiniCssExtractPlugin = require('mini-css-extract-plugin');\nconst { devMiddleware } = require('./serve.config');\n\nmodule.exports = {\n  mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',\n  devtool: 'source-map',\n  entry: {\n    app: './src/index',\n  },\n  output: {\n    globalObject: 'self',\n    path: path.resolve(__dirname, 'dist'),\n    publicPath: devMiddleware.publicPath,\n    filename: '[name].bundle.js',\n  },\n  plugins: [\n    new webpack.DefinePlugin({\n      'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV) },\n    }),\n    // Ignore require() calls in vs/language/typescript/lib/typescriptServices.js\n    new webpack.IgnorePlugin(\n      /^((fs)|(path)|(os)|(crypto)|(source-map-support))$/,\n      /vs(\\/|\\\\)language(\\/|\\\\)typescript(\\/|\\\\)lib/\n    ),\n    new webpack.ContextReplacementPlugin(\n      /monaco-editor(\\\\|\\/)esm(\\\\|\\/)vs(\\\\|\\/)editor(\\\\|\\/)common(\\\\|\\/)services/\n    ),\n  ].concat(\n    process.env.NODE_ENV === 'production'\n      ? [\n          new webpack.LoaderOptionsPlugin({\n            minimize: true,\n            debug: false,\n          }),\n          new MiniCssExtractPlugin({\n            filename: 'styles.css',\n          }),\n        ]\n      : [new webpack.NamedModulesPlugin(), new webpack.NoEmitOnErrorsPlugin()]\n  ),\n  module: {\n    rules: [\n      {\n        test: /\\.worker\\.js$/,\n        exclude: /node_modules/,\n        use: {\n          loader: 'worker-loader',\n          options: {\n            name: '[name].[hash].js',\n          },\n        },\n      },\n      {\n        test: /\\.js$/,\n        exclude: /node_modules|vendor/,\n        use: {\n          loader: 'babel-loader',\n        },\n      },\n      {\n        test: /\\.css$/,\n        use:\n          process.env.NODE_ENV === 'production'\n            ? [MiniCssExtractPlugin.loader, 'css-loader']\n            : ['style-loader', 'css-loader'],\n      },\n    ],\n  },\n};\n"
  }
]